繁体   English   中英

当参数有时可以为NULL时,如何参数化SQL查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM