我一直在使用这个python代码一段时间,并在尝试执行时遇到各种错误。
import csv
import MySQLdb
# open the connection to the MySQL server.
# using MySQLdb
mydb = MySQLdb.connect(host='myhostinfo',
user='me',
passwd='mypw',
db='thedatabase')
cursor = mydb.cursor()
# read the presidents.csv file using the python
# csv module http://docs.python.org/library/csv.html
csv_data = csv.reader(file('CHN-mod.csv'))
# execute the for clicle and insert the csv into the
# database.
for row in csv_data:
cursor.execute('INSERT INTO INDICATORS(INDICATORNAME, \
, INDICATORCODE)' \
'VALUES(%s, %s)', row)
#close the connection to the database.
cursor.close()
print "Import to MySQL is over"
我的代码在在线python验证器中验证,但我收到错误:
Traceback (most recent call last):
File "importdata.py", line 23, in <module>
'VALUES(%s, %s)' , row)
File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 201, in execute
self.errorhandler(self, exc, value)
File "/usr/local/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaultterrorhandler
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 ' INDICATORCODE)VALUES('Indicator Name', 'Indicator Code'>' at line 1")
答案 0 :(得分:1)
In [1]: 'INSERT INTO INDICATORS(INDICATORNAME, \
, INDICATORCODE)' \
'VALUES(%s, %s)'
Out[1]: 'INSERT INTO INDICATORS(INDICATORNAME, , INDICATORCODE)VALUES(%s, %s)'
INDICATORNAME
之后有两个逗号。
改为使用多行字符串:
cursor.execute('''INSERT INTO INDICATORS (INDICATORNAME, INDICATORCODE)
VALUES (%s, %s)''', row)
阅读起来容易得多,可以避免遇到问题。 MySQLdb解析字符串(尽管有空格)就好了。
要将每行的部分插入三个不同的表,您可以执行以下操作:
insert_indicators = '''INSERT INTO INDICATORS (INDICATORNAME, INDICATORCODE)
VALUES (%s, %s)'''
insert_foo = 'INSERT INTO FOO (...) VALUES (%s)' % (','.join(['%s']*10))
insert_bar = 'INSERT INTO BAR (...) VALUES (%s)' % (','.join(['%s']*10))
for row in csv_data:
cursor.execute(insert_indicators, row[:2])
cursor.execute(insert_foo, row[2:12])
cursor.execute(insert_bar, row[12:22])