2016-06-30 109 views
0

我有一个CSV文件看起来是这样的:(前 - ['Date', 'Person', 'Time Out', etc.] or ['6/20/2016', 'August', '11:58' etc.]CSV文件到SQL INSERT语句

Date,Person,Time Out,Time Back,Restaurant,Calories,Delicious? 
6/20/2016,August,11:58,12:45,Black Bear,850,Y 
6/20/2016,Marcellus,12:00,12:30,Brought Lunch,,Y 
6/20/2016,Jessica,11:30,12:30,Wendy's,815,N 
6/21/2016,August,12:05,1:01,Brought Lunch,,Y 

到目前为止,我已经成功地打印每行成一个字符串列表。

现在我需要做2件更多的事情:(为前 - ['ID', 'Date', 'Person', etc.] and ['1', '6/20/2016', 'August', etc.]

  1. 添加ID头和连续的数字串的每一行
  2. 分开的每一行,使他们能够被格式化成插入 语句,而不是只具有程序打印出每一行此起彼伏 -

这里就我现在已经得到了我的代码(前INSERT INTO Table ['ID', 'Date', 'Person', etc.] VALUES ['1', '6/20/2016', 'August', etc.]):

import csv 

openFile = open('test.csv', 'r') 
csvFile = csv.reader(openFile) 
for row in csvFile: 
    print (row) 
openFile.close() 
+2

是ID列在您的SQL表的主键?如果是这样,您可以依赖SQL的** auto_increment **属性,并忽略插入查询中的ID列。 – Mumpo

+0

为什么不使用MySQL的内置'LOAD DATA INFILE'来直接从CSV文件加载到数据库,而不是使用Python解析它? – Barmar

+0

@Mumpo,是的。我对MySQL并不是很熟悉,所以我不知道这是一种选择,但似乎比我上面列出的更可行。谢谢你的提示。 – ThoseKind

回答

0

试试这个(我忽略了ID部分,因为你可以使用MySQL的auto_increment)

导入CSV

openFile = open('test.csv', 'r') 
csvFile = csv.reader(openFile) 
header = next(csvFile) 
headers = map((lambda x: '`'+x+'`'), header) 
insert = 'INSERT INTO Table (' + ", ".join(headers) + ") VALUES " 
for row in csvFile: 
    values = map((lambda x: '"'+x+'"'), row) 
    print (insert +"("+ ", ".join(values) +");") 
openFile.close() 
+0

工作。谢谢您的帮助!作为一个便笺,你知道是否有任何方法可以摆脱VALUES列表中值之间的无用空格吗? – ThoseKind

+0

那些空间是故意的,只是用上面的这一行代替最后一行:'print(insert +“(”+“,”。join(values)+“);”)' – Mumpo

+0

哦,我不明白那部分,我更多的是指数据本身的实际字符串(例如''UNKNOWN',而不是'UNKNOWN')' – ThoseKind