我正在研究将数据导入MySQL数据库的Python脚本。
我使用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
。问题是当我尝试使用
WHERE
值创建None
条件时,它确实将None
替换为NULL
,但是我希望它能够将`param1` = NULL
替换为`param1` IS NULL
,所以条件评估为真。有什么办法可以直接解决这个问题?或者我可以只使用参数replace(不执行查询),然后自己进行替换(
= NULL
至IS 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 - Python MySQLdb查询参数“IS NULL”而不是“= NULL”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47415989/