jam*_*123 0 python postgresql psycopg2 asyncpg
在我使用 asyncpg 的 python 代码中,我将元组 ('PENDING',) 传递到 where-in 查询中,该查询记录为:
args=('TYPE_1', ('PENDING',))
query=SELECT * FROM actions where type = $1 AND status IN $2
Run Code Online (Sandbox Code Playgroud)
似乎 sql 查询最终应该是
SELECT * FROM actions where type = TYPE_1 AND status in ('PENDING',);
Run Code Online (Sandbox Code Playgroud)
但上面的代码导致:
asyncpg.exceptions.PostgresSyntaxError: syntax error at or near "$2"
Run Code Online (Sandbox Code Playgroud)
我认为这可能是因为元组中的尾随逗号,但我不知道如何摆脱它..
如果这可以帮助其他人。在 asyncpg 中,不再支持 WHERE IN。正确的方法是使用ANY,因此,在生成sql代码时,应该是:
WHERE type = $1 AND status = ANY($2::text[])
Run Code Online (Sandbox Code Playgroud)
其中 $2 是常规 python 列表。看了一下args,现在是:
('TYPE_1', ['PENDING'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |