在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查询中动态地传递列名和值。的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询以根据自定义列名和值获取值

如何动态准备 SQL 查询(也包括列名)避免 SQL 注入

如何在 django 的插入查询中动态使用列名

如何在不使用 %s 的情况下安全、动态地在查询中设置列名?

如何在python中的mysql查询中使用动态变量

在 Qtsql PyQT4 中添加列名和值作为变量