0

我有一个包含许多列的 csv 文件,我想将两个导入一个表,十个导入另一个,十个导入另一个。我怎样才能修改下面的代码以使其具有选择性?我正在考虑使用 if/elif 语句通过第一行数据来识别列,但我不确定这是最好/最简单的解决方案。

import csv
import MySQLdb
# open the connection to the MySQL server.
# using MySQLdb
mydb = MySQLdb.connect(host='hostinfo',
    user='myusername',
    passwd='mypw',
    db='mydatabase')
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.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.
mydb.commit()
cursor.close()
print "Import to MySQL is over"
4

1 回答 1

0

首先定义你的 SQL 字符串:

insert_indicators = '''INSERT INTO INDICATORS (INDICATORNAME, INDICATORCODE)
                       VALUES (%s, %s)'''
insert_sixties = 'INSERT INTO Sixties (...) VALUES (%s)' % (','.join(['%s']*10))
insert_seventies = 'INSERT INTO Seventies (...) VALUES (%s)' % (','.join(['%s']*10))

然后for-loop像这样使用它们:

for row in csv_data:
    cursor.execute(insert_indicators, row[:2])
    cursor.execute(insert_sixties, row[2:12])
    cursor.execute(insert_seventies, row[12:22])

请注意,拥有两个具有基本相同结构的不同表可能不是一个好主意。与其拥有一个Sixties表和(大概)一个Seventies表,不如拥有一个表,其中包含一个Decade可以保存枚举值的列,例如'Sixties'or 'Seventies'

通过将所有数据放在一个表中,您将能够更轻松地表达某些类型的查询(不必多次重复基本相同的查询,每个表一次。)

于 2013-05-27T16:48:16.993 回答