首页 > 解决方案 > asyncpg SELECT WHERE IN 给出 postgresSyntaxError

问题描述

在我使用 asyncpg 的 python 代码中,我将一个元组 ('PENDING',) 传递到 where-in 查询中,该查询记录为:

args=('TYPE_1', ('PENDING',))

query=SELECT * FROM actions where type = $1 AND status IN $2

似乎sql查询最终应该是

SELECT * FROM actions where type = TYPE_1 AND status in ('PENDING',);

但上面的代码导致:

asyncpg.exceptions.PostgresSyntaxError: syntax error at or near "$2"

我认为这可能是因为元组中的尾随逗号,但我不知道如何摆脱它..

标签: pythonpostgresqlpsycopg2asyncpg

解决方案


如果这可以帮助其他人。在 asyncpg 中,不再支持 WHERE IN。正确的方法是使用ANY,因此,在生成sql代码时,应该是:

WHERE type = $1 AND status = ANY($2::text[]) 

其中 $2 是常规的 python 列表。看了一下args,现在是:

('TYPE_1', ['PENDING'])

推荐阅读