gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:51:09 24 4
gpt4 key购买 nike

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

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

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

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

问题是当我尝试制作 WHERE 时条件为None值,它确实取代了我的 None通过NULL但我希望它能够取代 `param1` = NULL通过`param1` IS NULL ,以便条件评估为 true。

有什么办法可以直接解决这个问题吗?或者我可以只使用参数替换(不执行查询),然后自己进行替换( = 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)])

关于Python MySQLdb查询参数 "IS NULL"而不是 "= NULL",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47415989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com