如何在Psycopg2中使用string substitution处理NULL和非NULL值?
例如:
sql = 'SELECT * FROM table WHERE col = %s;'
possible_params = [1, None]
for x in possible_params:
print cur.mogrify(sql,(x,))
我需要第一个查询看起来像
SELECT * FROM table WHERE col = 1;
,第二个要等效于SELECT * FROM table WHERE col IS NULL;
有把戏吗?我有很多列可能为NULL或有一个值,因此动态构建SQL非常麻烦。
最佳答案
每当您不知道参数是否为NULL
时,都可以使用以下模式:
SELECT * FROM table WHERE col = <parameter> OR (col IS NULL AND <parameter> IS NULL)
其中
<parameter>
是您的参数。但是请注意,我连续两次使用相同的参数,因此您需要切换到
dict
格式。完整的代码是:sql = 'SELECT * FROM table WHERE col = %(p)s OR (col IS NULL AND %(p)s IS NULL)'
possible_params = [{"p":1}, {"p":None}]
for x in possible_params:
print cur.mogrify(sql,(x,))
关于python - psycopg2选择NULL值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21667912/