You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Psycopg3查询NULL值报错:从Psycopg2迁移后的语法问题

Psycopg3中处理NULL查询参数的解决方案

在Psycopg3中,PostgreSQL的SQL语法要求更严格——IS NULL是固定语法,不能用参数占位符($1)替代NULL关键字,这就是你遇到语法错误的原因。Psycopg2之前可能做了隐式的语法转换,但Psycopg3不再支持这种非标准用法。

下面是几种可行的解决办法:

方法1:明确判断NULL(固定场景)

如果你的查询逻辑就是要匹配var_1为NULL的情况,直接写死IS NULL即可:

cursor.execute("SELECT * FROM mock_table WHERE var_1 IS NULL")

方法2:使用IS NOT DISTINCT FROM(通用场景)

如果参数可能是具体值或NULL,推荐用IS NOT DISTINCT FROM,它能同时处理普通值和NULL的匹配:

# 参数为None时,等价于var_1 IS NULL;参数为具体值时,等价于var_1 = 值
cursor.execute("SELECT * FROM mock_table WHERE var_1 IS NOT DISTINCT FROM %s", [None])

方法3:动态构建查询语句(灵活场景)

根据参数是否为NULL动态拼接SQL,确保语法正确:

param = None
if param is None:
    cursor.execute("SELECT * FROM mock_table WHERE var_1 IS NULL")
else:
    cursor.execute("SELECT * FROM mock_table WHERE var_1 = %s", [param])

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:24:55