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

最佳答案

首先定义您的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列且可以容纳enumerated values的表,例如'Sixties''Seventies'

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

关于python - 使用Python将特定的列数据从CSV导入到不同的MYSQL表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16776828/

10-13 00:53