我正在编写一个Python脚本来分析一些来自几个不同SQL数据库的数据。对数据库的查询基于先前查询的结果,基于不同的数据库。
我遇到的问题是某些查询可能会返回NULL
。
所以,如果我有像
这样的查询SELECT *
FROM table_name
WHERE fieldA = ?
AND fieldB = ?
我有两个从其他查询返回的值;当我尝试在Python中执行查询时,field_a = 'A'
和field_b = None
:
with pyodbc.connect('Trusted_connection=yes', driver='{SQL Server}', server=server_name, database=database_name, autocommit=True) as connection:
ds = connection.execute(sql,[field_a, field_b])
什么都没有。如果我更改SQL查询,以便将None / Null值硬编码:
SELECT *
FROM table_name
WHERE field_a = ?
AND field_b IS NULL
我得到了我期望的数据。
除了根据字段值从子字符串构建SQL查询之外,还有更好的方法来处理这个问题吗?
答案 0 :(得分:2)
尝试使用OR
SELECT *
FROM table_name
WHERE (field_a = ? AND field b IS NULL)
OR (field_a IS NULL AND field b = ?)
OR (field_a = ? AND field b = ?)
希望这有帮助!
答案 1 :(得分:0)
我猜测none
在编译成SQL时会被转换为null
。由于null永远不能等于任何东西(甚至不是另一个null),因此您必须像使用硬编码值时那样使用is null
。如果你想同时做两件事怎么办?我要去的路线是用这样的方法来控制null的可能性:
and field_b = isnull(?, '')
当然这有一个漏洞,如果field_b实际上是一个空字符串,它将等同于你不打算这样做。根据这是否存在问题,您还可以使用case
语句或or
条件获得广告。