我有一个包含许多列的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"
答案 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'
。
通过将所有数据放在一个表中,您将能够更轻松地表达某些类型的查询(无需多次重复相同的查询,每个表一次。)