在python mysql查询中动态地传递列名和值。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python mysql查询中动态地传递列名和值。相关的知识,希望对你有一定的参考价值。
这就是下面的代码
pythonlist = ['Name','Mno']
datalist = ["qwerty",'234']
sql = "SELECT " + ",".join(pythonlist) + " FROM data WHERE name = '"+ "','".join(datalist) + "' INTO OUTFILE filename"
print(sql)
输出。
SELECT Name,Mno FROM data WHERE Name= 'qwerty','234'
希望的输出。
SELECT Name,Mno FROM data WHERE Name = 'qwerty' and Mno = 234
请注意去掉 "mno "中的引号。
我这样做的原因是由于列名以及与之对应的值会经常变化。
答案
编码。
queryparams = {'Name': 'qwerty', 'Mno': '234'}
and_clause = []
[and_clause.append(' %s = %s ') for k,v in queryparams.items()]
and_clause_str = ' and '.join(and_clause)
sql = 'SELECT %s FROM data WHERE ' + and_clause_str
params = [','.join(queryparams.keys())]
for k,v in queryparams.items():
params.append(str(k))
params.append(str(v))
print(sql)
print(params)
cursor.execute(sql, params=tuple(params))
这工作,如果你添加1020多个项目到字典。以及防止 SQL-injection
: 使用 params
传递值,而不是 string-concatenation
.
另一答案
试试这个
data = {'Name': 'qwerty' , 'Mno' : '234'}
sql = "SELECT " + ", ".join(data.keys()) + " FROM data WHERE " + str(list(data.keys())[0]) + " = '" +
str(data[list(data.keys())[0]]) + "' and " +
str(list(data.keys())[1]) + " = " + str(data[list(data.keys())[1]])
print(sql)
以上是关于在python mysql查询中动态地传递列名和值。的主要内容,如果未能解决你的问题,请参考以下文章