Django原始sql json参数未按预期语法执行

2024-05-14 21:51:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在django应用程序(pgsql 9.6后端)中执行rawsql,如下所示:

obj=AddModel.objects.raw("""
SELECT * FROM "codeaddmodel" \
WHERE ("codeaddmodel"."data" -> 'CodeData') \
@> '[{"street": "New Street" }]'
""")

而且效果很好。在

现在,我按照django doc执行以下操作,并使用params:

^{pr2}$

这就产生了一个错误:

^{3}$

我已经试了大约两个小时了,但谷歌已经让我失败了!在


Tags: djangofromobj应用程序streetdatarawobjects
1条回答
网友
1楼 · 发布于 2024-05-14 21:51:35

您试图在文本中使用占位符:

In [12]: cur.execute("""select ('[{"street": %s}]')::json""", ('New Street',))
                                     -
ProgrammingError                          Traceback (most recent call last)
<ipython-input-12-dd23cc772072> in <module>()
  > 1 cur.execute("""select ('[{"street": %s}]')::json""", ('New Street',))

ProgrammingError: syntax error at or near "New"
LINE 1: select ('[{"street": 'New Street'}]')::json

结果是一个文本,后面是关键字New和{},以及另一个文本。请注意,这将如何为SQL注入打开空间:

^{pr2}$

所以不要手动引用占位符。相反,您应该用占位符替换整个值,并传递一个合适的值,在本例中是一个JSON字符串:

obj=AddModel.objects.raw("""
SELECT * FROM "codeaddmodel"
WHERE ("codeaddmodel"."data" -> 'CodeData')
@> %s
""", [json.dumps([{'street': term}])])

或者如果使用psycopg2和Django的raw只是传递值,^{}

相关问题 更多 >

    热门问题