如何在MySQL查询中使用“;“在哪里?”;?

如何在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

我有下面的代码,我希望我的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=[]
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注入攻击。结果仍然为空()结果仍然为空()