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

使用psycopg2时,如何通过含字符串字面量的SQL插入NULL值?

解决psycopg2插入NULL而非'None'字符串的问题

问题根源

你当前用f-string直接拼接SQL语句,Python里的None被字符串化后会变成'None',导致最终执行的SQL是address = 'None',所以数据库里插入的是字符串而非SQL标准的NULL值。

正确做法

放弃手动拼接SQL参数,使用psycopg2的参数化查询功能——它会自动完成Python类型到PostgreSQL类型的转换,包括把None映射为SQL的NULL,同时还能避免SQL注入。

修改后的代码:

# 简化address变量的赋值(和原逻辑等价)
address = data.get('address')

# 参数化查询,用%s作为占位符
cursor.execute(
    "UPDATE public.mytable SET name = %s, address = %s WHERE id = %s",
    (name, address, my_id)
)

额外提示

  • psycopg2的%s是参数占位符,不是Python的字符串格式化符号,它会安全地将参数注入SQL,自动处理类型转换。
  • 永远不要手动拼接用户输入或动态变量到SQL语句中,这是引发SQL注入的高危行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:19:54