1

我一直在与这个 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")
4

1 回答 1

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])
于 2013-05-27T13:01:08.293 回答