node.js - Knex.js 强制会话重用 4 个以下查询
问题描述
我有一个子查询在四个不同的查询中使用,所有这些查询都执行以呈现一些类似仪表板的功能。所有查询的共同点是我想在临时表中提取的这个子查询。这是成功的,但是使用 Knex.js(这太棒了)连接是池化的,这意味着所有查询都使用不同的连接,这再次导致临时表被丢弃在两者之间。
有没有办法以这种方式强制使用一个连接和 Knex 中的一个会话?还是我需要寻找其他解决方法,例如将其全部包装在事务中?
解决方案
基本上,您只能通过在同一事务中运行这些查询来做到这一点。这迫使 knex 对所有查询使用相同的连接。
另一种方法是手动从池中获取连接,knex.client.aqcuireConnection()
并用于knex.connection(connection)
在该单个连接中运行查询。最后,您需要将连接释放回池中,以免泄漏与knex.client.releaseConnection(connection)
.
就像是:
let connection = await knex.client.acquireConnection();
try {
const res = await knex('table').connection(connection).where('id',1);
const res2 = await knex('table2').connection(connection).where('id',1);
} finally {
knex.client.releaseConnection(connection);
}
推荐阅读
- swift - Swift 4 中的嵌套枚举
- python-3.x - 将 pandas 数据框写入 csv 但列之间没有空格 - sep'\t' 参数在 Python 3 中被忽略
- c - 如何使字符串数组的值不改变?
- hugo - 有什么方法可以为单个存储库和多个站点提供一个通用的 netlify.toml 文件?
- python - 根据文本文件中字符串“xyz”的外观删除传递给文本文件的最后一个字符输入
- sorting - 定义一个以三个数字为参数并返回两个较大数字的平方和的过程
- javascript - 如何解决输入连续性匹配
- javafx - 使用 JavaFX 创建六边形字段
- javascript - 我正在尝试使用 npm 更新我的魔镜,在终端中使用以下命令:npm install -g npm
- html - 使用一个装饰器而不是多个?“一对多”和“多对一”?