Python MySQLdb 查询参数 "IS NULL" 而不是“= NULL”

Python MySQLdb query parameters "IS NULL" instead of "= NULL"

我正在编写 Python 脚本以将数据导入 MySQL 数据库。 我使用 MySQLdb 来执行我的查询。

我还使用一个函数来设置查询及其带有命名参数的数据在请求中自动替换,例如:

req = "SELECT * FROM sample WHERE `id` = %(id)s and `param1` = %(param1)s"
data = {'id': 15, 'param1': None}
cursor.execute(req, data)

我真的很喜欢这种方式,因为我对 3 或 4 个查询使用相同的数据 dict

问题是当我尝试用 None 值创建一个 WHERE 条件时,它确实用 NULL 替换了我的 None 但我希望它是能够将 `param1` = NULL 替换为 `param1` IS NULL,以便条件计算结果为真。

有什么办法可以直接解决这个问题吗?或者我可以只使用参数替换(不执行查询),然后自己进行替换(= NULLIS NULL),然后执行查询。

您可以执行以下操作。

def query(params):
    # Make sure it's hardcoded and malicious user can't overwrite it
    param_whitelist = 'id', 'param1'

    sql = '''
        SELECT * 
        FROM sample 
        WHERE {placeholders}
    '''
    placeholders = ' AND '.join(
        '`{field}` {op} %s'.format(field=k, op='IS' if params[k] is None else '=') 
        for k in param_whitelist)
    sql = sql.format(placeholders=placeholders)

    cursor.execute(sql, params)
    return cursor


data = {'id': 15, 'param1': None}
print([r for r in query(data)])