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