[英]MySQL SELECT from field in CSV in Python
我目前在基于python脚本中的.csv文件中的行执行MySQL SELECT查询时遇到问题;
#!/usr/bin/env python
import MySQLdb, csv, sys
db = MySQLdb.connect(host="hostname",
user="user",
passwd="password",
db="database")
cur = db.cursor()
customers=csv.reader(file("customers.csv"))
for row in customers(row):
cur.execute("select field from database.table where customernumber = %s;" % row)
cur.commit()
cur.close()
我得到这个;
Traceback (most recent call last):
File "script.py", line 17, in <module>
cur.execute("select field from database.table where field = %s;" % row)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '['1598']' at line 1")
.csv文件中的第一行是1598。
由于某种原因,它使用'['1598']'
括起该条目,因此mySQL查询失败,
有什么想法为什么要包住它以及如何阻止它吗?
提前致谢!
由于DPA原因,我已将所有mysql详细信息重命名为默认值
阿什利
首先,您需要修复csv阅读器逻辑。 然后,您需要将值作为参数传递给execute
,对连接(而不是游标commit()
execute
commit()
,最后-您要在循环本身中关闭连接。
import csv
with open('customers.csv') as f:
reader = csv.reader(f)
rows = list(reader)
for row in rows:
cur.execute("select field from database.table where customernumber = %s;", (row[0],))
con.commit()
con.close()
尝试这个,
对于客户中的行:打印行,行[0]
row [0]应该是第一列的值。
将执行SELECT更改为如下所示:
cur.execute("SELECT field FROM database.table WHERE customernumber = %s", (row[0],))
如果row [0]有该数字,则无论哪个索引都有它,如row [4]。
cur.execute("select field from database.table where customernumber = %s;" % row[0])
您需要传递row[0]
而不是row
。 row
是一个列表, row[0]
是该列表的第一个元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.