CSV文件到SQL插入语句

时间:2016-06-30 22:52:36

标签: python mysql python-3.x csv sql-insert

我有一个看起来像这样的CSV文件:

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

到目前为止,我已设法将每一行打印到字符串列表中(例如 - ['Date', 'Person', 'Time Out', etc.] or ['6/20/2016', 'August', '11:58' etc.])。

现在我还需要做两件事:

  1. 为每一行添加ID标题和连续数字字符串(例如 - ['ID', 'Date', 'Person', etc.] and ['1', '6/20/2016', 'August', etc.]
  2. 分隔每一行,以便将它们格式化为插入 陈述而不是让程序一个接一个地打印出来(例如 - INSERT INTO Table ['ID', 'Date', 'Person', etc.] VALUES ['1', '6/20/2016', 'August', etc.]
  3. 以下是我现在的代码:

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

3 个答案:

答案 0 :(得分:0)

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

import 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()

答案 1 :(得分:0)

如果要进行类型转换,可以使用此功能,我已使用它通过字符串sql语句将数据放入Google大查询中。

PS:您可以在函数上放置其他类型

import csv

def convert(value):
    for type in [int, float]:
        try:
            return type(value)
        except ValueError:
            continue
    # All other types failed it is a string
    return value


def construct_string_sql(file_path, table_name, schema_name):
    string_SQL = ''
    try:
        with open(file_path, 'r') as file:            
            reader = csv.reader(file)
            headers = ','.join(next(reader))
            for row in reader:
                row = [convert(x) for x in row].__str__()[1:-1]
                string_SQL += f'INSERT INTO {schema_name}.{table_name}({headers}) VALUES ({row});'
    except:
        return ''

    return string_SQL 

答案 2 :(得分:0)

您可以使用此开源工具生成批量 INSERT 语句:https://simranjitk.github.io/sql-converter/