knex.js - knex.raw() 和 knex.schema.raw() 有什么区别?
问题描述
knex.raw(sql, bindings)
和knex.schema.raw(statement)
。
这两个函数似乎有不同的签名。
如果它们是等效的,我该如何使用knex.schema.raw(statement)
并传递bindings
给它?
解决方案
knex.raw
创建可以立即执行的查询构建器实例。
事情的工作方式knex.schema.*
有点不同。Knex 模式方法创建一个查询数组,然后在解析模式构建器时一个一个地执行。
因此,例如,如果您这样做,knex.schema.createTable(t => ...).raw('DROP ALL').toSQL()
您将看到生成了多个查询,并且它们都将在触发架构构建器时执行。
如果你只做await knex.schema.raw('SELECT 1')
or await knex.raw('SELECT 1')
,就不会有任何差异。但knex.schema.raw
你也可以这样做:
await knex.schema.raw('SELECT 1').raw('SELECT 2');
它返回一个数组,其中找到了两个查询的结果。因此,完全有可能利用该功能来一个接一个地运行多个查询,如下所示:
await knex.schema
.raw('?', [knex('table1').where('id', 1)])
.raw('?', [knex('table2').where('id', 2)]);
也knex.schema.raw
不会 return QueryBuilder
,但它会返回SchemaBuilder
不同的可用方法。
因此knex.schema.raw
不能用作正常查询的一部分,例如knex('table').where(knex.raw('id = 1'))
推荐阅读
- html - Angular 8 中使用 ngFor 的多级下拉菜单
- qt - 无法自动化windeployqt,未找到
- sql - 如何将值插入列并同时引用 Oracle 表中该列的前一个值?
- minio - 迷你吧。我无法运行 minio 集群。在从节点上收到此错误
- python - 如何在网页中基于十六进制字符串模式抓取数据
- c - 赋值表达式隐含的转换
- python - 从头开始实现 numpy 协方差矩阵
- docker - 码头工人群。无法对 docker 堆栈的容器运行 exec,因为“docker 容器列表”找不到容器
- selenium - 为什么 Facebook 帖子抓取在数百个帖子被抓取后变得非常缓慢或停止?
- python - Numpy:模型的特征数量必须与输入相匹配。模型 n_features 为 2,输入 n_features 为 3