python - 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"
我认为这可能是因为元组中的尾随逗号,但我不知道如何摆脱它..
解决方案
如果这可以帮助其他人。在 asyncpg 中,不再支持 WHERE IN。正确的方法是使用ANY
,因此,在生成sql代码时,应该是:
WHERE type = $1 AND status = ANY($2::text[])
其中 $2 是常规的 python 列表。看了一下args
,现在是:
('TYPE_1', ['PENDING'])
推荐阅读
- java - 在计算集群上使用 PyNetLogo 执行敏感性分析时遇到 NameError
- python - PySpark withColumn 简单的 UDF 导致作业中止
- openssl - RHEL 8:警告:pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用
- sql-server - 致命错误:未捕获的错误:调用字符串上的成员函数 query() - 远程连接到 SQL Server
- php - 无法显示错误,500 内部服务器错误
- .net-6.0 - .NET 6 中不推荐使用 ReflectionOnlyLoad
- graphql - 尝试检查 Shopify Payments 是否已激活时访问被拒绝
- node.js - 由于@nestjs/config 中的 ts 错误,嵌套构建失败
- c - 如果我在 C 中使用 printf 和 scanf 设置条件语句,会有问题吗?
- python - 我怎样才能使这个 for 循环更有效和更快