如何在MySQL查询中使用“;“在哪里?”;?
我有下面的代码,我希望我的MySQL查询在“name”列中选择那些与“filenames”python列表中的值相同的值。我一直得到一个空()作为结果。有人能帮我吗如何在MySQL查询中使用“;“在哪里?”;?,mysql,string,python-2.7,Mysql,String,Python 2.7,我有下面的代码,我希望我的MySQL查询在“name”列中选择那些与“filenames”python列表中的值相同的值。我一直得到一个空()作为结果。有人能帮我吗 import MySQLdb import fnmatch import os import pprint connect = MySQLdb.connect(host = "123.5.4.4", port=3366, user = "me", passwd="*********", db="data2") filenames
import MySQLdb
import fnmatch
import os
import pprint
connect = MySQLdb.connect(host = "123.5.4.4", port=3366, user = "me", passwd="*********", db="data2")
filenames=[]
maindict = {}
for root, dirnames, filenames in os.walk('d:/data1'):
for filename in fnmatch.filter(filenames, '*.txt'):
filenames.append(filename)
with connect:
cur= connect.cursor()
cur.execute("SELECT version,name FROM data2.files WHERE name IN ('filenames'.join('')" )
result = cur.fetchall()
pprint.pprint(result)
替换:
cur.execute("SELECT version,name FROM data2.files WHERE name IN ('filenames'.join('')" )
与:
在python shell中:
>>> filenames=['file1', 'file2']
>>> query = "SELECT version,name FROM data2.files WHERE name IN ('%s')" % "','".join(filenames)
>>> print query
SELECT version,name FROM data2.files WHERE name IN ('file1','file2')
>>>
替换:
cur.execute("SELECT version,name FROM data2.files WHERE name IN ('filenames'.join('')" )
与:
在python shell中:
>>> filenames=['file1', 'file2']
>>> query = "SELECT version,name FROM data2.files WHERE name IN ('%s')" % "','".join(filenames)
>>> print query
SELECT version,name FROM data2.files WHERE name IN ('file1','file2')
>>>
你应该使用
cur.execute(
"SELECT version,name FROM data2.files WHERE name IN (" +
",".join(("%s",) * len(filenames)) +
")",
tuple(filenames)
)
这将创建表单的SQL字符串
WHERE name IN (%s,%s,%s,%s)
使用您需要的尽可能多的%s
s,并使MySQL模块用文件名
数据替换它们,根据需要进行引用。您应该使用
cur.execute(
"SELECT version,name FROM data2.files WHERE name IN (" +
",".join(("%s",) * len(filenames)) +
")",
tuple(filenames)
)
这将创建表单的SQL字符串
WHERE name IN (%s,%s,%s,%s)
使用您需要的尽可能多的
%s
s,并使MySQL模块用文件名
数据替换它们,根据需要进行引用。您的注释中似乎有一个额外的引用,对吗?它不适用于此。您可以添加一个额外的调试行,以打印生成的sql查询。然后在mysql shell中激发生成的sql。现在这是一个语法问题。您编写的代码的语法正确吗?我没有尝试使用db。但是请看上面的python shell示例,有更好的方法。您的易受SQL注入攻击。您的注释中似乎有一个额外的引号,对吗?它不能使用此引号。您可以添加一个额外的调试行来打印生成的SQL查询。然后在mysql shell中激发生成的sql。现在这是一个语法问题。您编写的代码的语法正确吗?我没有尝试使用db。但是请看上面的python shell示例,有更好的方法。您的易受SQL注入攻击。结果仍然为空()结果仍然为空()