使用Python从CSV导入特定列数据到不同的MYSQL表

时间:2013-05-27 15:59:54

标签: python mysql csv mysql-python

我有一个包含许多列的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"

1 个答案:

答案 0 :(得分: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列可以容纳enumerated values(例如{},而不是拥有Seventies表和(大概)Decade表可能更好一些。 {1}}或'Sixties'

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