【发布时间】:2017-03-09 10:21:07
【问题描述】:
我正在尝试使用 python 将 csv 文件导入 mysql 以进行练习。我相信我已经下载了正确的库。每次我运行我的代码时,我都会收到错误:
mysql.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在 '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)' 附近使用的正确语法第 1 行
我不知道为什么这不起作用,所有答案似乎都在使用不支持 python 3.x 的 mysqldb。
我的代码:
import mysql.connector
import pandas as pd
cnx = mysql.connector.connect(user='root', password='comeonin', host='127.0.0.1', database='boxresults')
cursor = cnx.cursor()
csv_data = pd.read_csv('Betting/boxresults3.csv')
for row in csv_data:
cursor.execute("INSERT INTO table1(Week, Day, Date, Winner, Loser, PtsW, PtsL, YdsW, TOW, YdsL, TOL) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s, %s)", row)
cursor.close()
cnx.close()
新代码:
import mysql.connector
import pandas as pd
cnx = mysql.connector.connect(user='root', password='comeonin', host='127.0.0.1', database='boxresults')
cursor = cnx.cursor()
csv_data = pd.read_csv('Betting/boxresults3.csv')
for row in csv_data.iterrows():
list = row[1].values
cursor.execute("INSERT INTO table1(Week, Day, Date, Winner, Loser, PtsW, PtsL, YdsW, TOW, YdsL, TOL) VALUES('%d','%s','%s','%s','%s','%d','%d','%d','%d','%d', '%d')" % tuple(list))
cursor.close()
cnx.close()
【问题讨论】:
-
打印
row看看你有什么。execute()需要包含 11 个元素的元组。 -
当我打印行时,我得到 11 个不同的列名,但我不认为它是一个元组。它正在一张一张地打印它们。
-
为什么会有 pandas 的开销? CSV 模块会很好。如果使用,pandas 会考虑将其to_sql 批量追加到一次调用中。即使 MySQL 仍然有用于文本文件的 LOAD DATA INFILE 命令。
-
mysqldb 有一个 Python 3 版本:pypi.python.org/pypi/mysqlclient --- 工作方式完全相同。另外,不确定这是否是 mysql.connector 的事情(顺便说一句,它的速度要慢得多),但是 %d 甚至可以工作吗? mysqldb 只允许 %s,无论类型如何......此外,行需要严格地是一个元组(再次,mysqldb,不确定但值得一提......)另外,不要像下面建议的那样在参数周围使用引号。 ..如果您还需要帮助,请告诉我,我会帮您解决...
标签: python mysql python-3.x mysql-python