使用gorm的postgres中的“$ 1”或附近的golang语法错误

Posted

技术标签:

【中文标题】使用gorm的postgres中的“$ 1”或附近的golang语法错误【英文标题】:golang syntax error at or near "$1" in postgres using gorm 【发布时间】:2022-01-17 16:57:52 【问题描述】:

我正在尝试根据他们的姓名查找多个用户。我使用 gorm 如下:

err := db.Where("username IN ?", []string"name1", "name2").Find(&users).Error

但是生成的查询是:

SELECT * FROM "users_customer"."user" WHERE (username IN 'name1','name2')

正确的查询应该是:

SELECT * FROM "users_customer"."user" WHERE username IN ('name1','name2')

因此抛出错误pq: syntax error at or near "$1" 。我使用与文档中所述相同的语法,即db.Where("name IN ?", []string"jinzhu", "jinzhu 2").Find(&users),但不知道为什么在我的情况下它不起作用。

【问题讨论】:

你在你的字符串中试过IN (?)吗? @a_horse_with_no_name。问题解决了。谢谢。 【参考方案1】:

Gorm 默认在每一侧都添加 ' 这个,并且它不添加括号 ()

你应该像这样手动添加它:

    names := []string"name1", "name2"

    commaSep := "'" + strings.Join(names, "', '") + "'"
    err := db.Where("username IN (?)", commaSep).Find(&users).Error

你可以在这里运行它:https://go.dev/play/p/ox3H2gL1yek

err := db.Where("username IN (?)", []string"name1", "name2").Find(&users).Error

【讨论】:

以上是关于使用gorm的postgres中的“$ 1”或附近的golang语法错误的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:使用psycopg2或附近未终止的引用字符串

错误:“修改”处或附近的语法错误 - 在 postgres

获取 PSQLException:错误:在带有 Postgres 的 spark jdbc 中使用查询而不是表名时在“SELECT”处或附近出现语法错误

如何阻止 Go gorm 在 Postgres 中对我的自引用外键强制非空约束

“TRUNCATE”处或附近的语法错误 - Aurora Postgres 10.12

Postgres 中的动态 SQL