knex 查询与表名周围的引号

Posted

技术标签:

【中文标题】knex 查询与表名周围的引号【英文标题】:knex query with quotes around table name 【发布时间】:2018-07-13 10:40:01 【问题描述】:

我有一个查询如下,它返回代码不为空的用户信息

从代码不为空的“dev.user”中选择名称、年龄

返回预期输出

我正在做的事情

knex("user").select('name','age').whereNotNull('code')

它返回空!

调试查询返回如下

从“用户”中选择“姓名”、“年龄”,其中“代码”不为空 knex("dev.user").select('name','age').whereNotNull('code')

调试查询返回如下

从“dev”中选择“name”、“age”、“user”,其中“code”不为空

首先,当我初始化 knex 时,我设置了第二个不起作用的模式,即使我提供模式它正在生成查询为“dev”。“user”而不是“dev.user”

任何建议都会有所帮助

【问题讨论】:

您找到解决方案了吗?我有名为“a.b”的视图,knex 将生成 'a'.'b' 而不是 'a.b'。 @EricRicher 我记得使用 known.raw 函数和表名是根据运行的环境生成的。我相信这个 sud 现在有一些优雅的解决方案...... 在当前版本中找不到优雅的解决方案。最终将视图重命名为“a_b”。感谢您的回复。 【参考方案1】:

从文档看来,您应该使用.withSchema()。 (see link)

注意:标识符语法没有选择架构的地方,所以如果你 正在执行 schemaName.tableName,查询可能会呈现错误。采用 .withSchema('schemaName') 代替。

应该是:

knex("user")
   .withSchema("dev")
   .select('name','age').whereNotNull('code')

我自己不必包含架构,所以祝你好运。

加里。

【讨论】:

以上是关于knex 查询与表名周围的引号的主要内容,如果未能解决你的问题,请参考以下文章

解析sql中的表名

为啥 Oracle 12c 查询需要在表周围加上双引号 [重复]

Postgres 列名或表名啥时候需要引号,啥时候不需要引号?

即使参数存在而没有周围的引号,也无法找到命名参数

在python中的字符串周围强制使用三引号[关闭]

为啥我的 sql 命令不接受表名的带引号标识符?