Python SQL 选择可能为NULL的值

4 投票
7 回答
14573 浏览
提问于 2025-04-15 12:35

我刚开始学习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' 的比较就可以正常工作了。

设置 ANSI_NULLS

撰写回答