使用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
相关产品推荐
相关产品推荐

