我有一个python代码,我从csv文件读取数据并将其内容推送到MySQL。我收到了上面提到的错误。这是代码:
csv_data = csv.reader('ga_python_data.csv')
csv_data = csv.reader('data.csv')
for row in csv_data:
cursor.execute('INSERT INTO new (date,sessions) VALUES (%s, %s)',*row)
错误是:
TypeError: not enough arguments for format string.
答案 0 :(得分:0)
@MartinEvans关于缺失参数的评论是正确的:
目前你有一个参数行,但你有两个%s指定。您需要在行之后添加第二个参数。
如果row
包含您要插入的两个字符串,则需要将其解压缩,如*row
在这种情况下,您的代码将如下所示:
cursor.execute("INSERT INTO metrics VALUES ('%s', '%s')", *row)
答案 1 :(得分:0)
问题是因为你的行是一个字符串,而你正试图粘贴两个字符串。你可能应该这样做:
tokens=row.split(',')
cursor.execute(....., tokens[0],tokens[1])
答案 2 :(得分:0)
目前您有一个参数行,但您有两个%s
说明符。您需要在行之后添加第二个参数。在您的情况下,您正在从CSV文件中读取条目。从理论上讲,每行应始终有两个项目,但如果您的CSV文件有一个空行,或者其中一行缺少一个条目,则会导致问题。此脚本仅接受包含两个值的行:
import MySQLdb
import csv
# ...first connect to db and create cursor
with open('data.csv', 'rb') as f_data:
csv_data = csv.reader(f_data)
#header = next(csv_data) # optionally skip over a header line
for row in csv_data:
if len(row) == 2:
cursor.execute('INSERT INTO new (date,sessions) VALUES (%s, %s)', tuple(row))
最后,确保正确打开文件非常重要。在Python 2.x中,必须以二进制模式打开文件。如果您使用的是Python 3.x,则需要按如下方式更改行:
with open('data.csv', 'r', newline='') as f_data: