pyodbc 我可以这样参数化查询;
pyodbc
value = "testval" query = \ """ SELECT * FROM TestTable WHERE Column = ?; """ cursor.execute(query, value)
但问题是如果 value 如果为None,则查询应如下所示;
value
value = None query = \ """ SELECT * FROM TestTable WHERE Column IS NULL; """ cursor.execute(query)
那么当 价值
价值
value = get_value() # can return a string or None query = \ """ SELECT * FROM TestTable WHERE Column ??????????? """ cursor.execute(query, value)
解决方案是使用ISO/ANSI标准 NULL -安全比较:
NULL
WHERE Column IS NOT DISTINCT FROM ?
并非所有数据库都支持此功能,因此您还可以使用:
WHERE Column = ? OR (Column IS NULL AND ? IS NULL)
如果不愿意将参数传递两次,可以将其包含在 FROM
FROM
. . . FROM . . . CROSS JOIN (SELECT ? as compColumn) params WHERE (Column = params.compColumn0 or (Column IS NULL and params.compColumn IS NULL)