我目前在基于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查询失败,
为什么它包围它以及如何阻止它的任何想法?
提前致谢!
我已将所有mysql详细信息重命名为DPA原因的默认值
阿什利
答案 0 :(得分:1)
首先,您需要修复您的csv阅读器逻辑。然后你需要将值作为参数传递给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()
答案 1 :(得分:0)
试试这个,
对于客户中的行: 打印行,行[0]
row [0]应该是第一列值。
答案 2 :(得分:0)
将执行SELECT更改为以下内容:
cur.execute("SELECT field FROM database.table WHERE customernumber = %s", (row[0],))
如果row [0]有数字,否则哪个索引有它,如row [4]。
答案 3 :(得分:0)
cur.execute("select field from database.table where customernumber = %s;" % row[0])
您需要传递row[0]
而不是row
。 row
是一个列表,row[0]
是该列表的第一个元素。