Python SQL 选择可能为NULL的值
我刚开始学习Python,遇到了一个关于SQL查询的问题。
我正在创建一个SQL的SELECT语句,这个语句是用一个数组里的值来填充的,代码如下:
ret = conn.execute('SELECT * FROM TestTable WHERE a = ? b = ? c = ?', *values)
当数组里的值都是实际的值时,这个方法是可以正常工作的。但是在某些情况下,数组中的某个值可能会是None。这样查询就会失败,因为在SQL中判断是否为NULL时,应该用IS NULL,而不是用“= NULL”。
有没有简单的方法可以解决这个问题呢?
7 个回答
2
你可以使用三元运算符来把'='换成'IS':
("=","IS")[var is None]
如果变量是None,就会返回"IS",否则返回"="。
不过这样在一行里写不是特别优雅,但只是为了演示一下:
query = "SELECT * FROM testTable WHERE a %s %s" % ( ("=","IS")[a is None], str(a) )
3
使用: "从测试表中选择所有数据,条件是(a等于?或者a是空值)并且(b等于?或者b是空值)"
这样做会选出那些a字段完全匹配你提供的值的记录,同时也会包括a字段为空的记录——如果你需要这样的结果的话。
3
如果你在使用 SQL Server,只要你把会话中的 ANSI_NULLS 设置为关闭,那么 '= null' 的比较就可以正常工作了。