[英]How to parameterize SQL query when the parameter can sometimes be NULL?
使用pyodbc
我可以像这样对查询进行参数化;
value = "testval"
query = \
"""
SELECT *
FROM TestTable
WHERE Column = ?;
"""
cursor.execute(query, value)
但是问题在于,如果该value
None,则查询应如下所示;
value = None
query = \
"""
SELECT *
FROM TestTable
WHERE Column IS NULL;
"""
cursor.execute(query)
因此,当value
可以为None或字符串时,查询应为什么样?
value = get_value() # can return a string or None
query = \
"""
SELECT *
FROM TestTable
WHERE Column ???????????
"""
cursor.execute(query, value)
该解决方案是使用ISO / ANSI标准NULL
-safe比较:
WHERE Column IS NOT DISTINCT FROM ?
并非所有数据库都支持此功能,因此您还可以使用:
WHERE Column = ? OR (Column IS NULL AND ? IS NULL)
如果您不愿意两次传递参数,则可以将其包含在FROM
子句中:
. . .
FROM . . . CROSS JOIN
(SELECT ? as compColumn) params
WHERE (Column = params.compColumn0 or (Column IS NULL and params.compColumn IS NULL)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.