使用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或附近未终止的引用字符串
获取 PSQLException:错误:在带有 Postgres 的 spark jdbc 中使用查询而不是表名时在“SELECT”处或附近出现语法错误
如何阻止 Go gorm 在 Postgres 中对我的自引用外键强制非空约束