使用python创建SQL INSERT脚本

时间:2015-08-26 19:12:49

标签: python sql relational-database

我有一个csv文件。我想用python:

以关系方式组织这个(非标准化的)数据

应创建一个连接表格的ID。

例如,从csv文件中分割我的数据并创建m:n关系。我的结果应该是三张桌子。

以下示例可能会澄清这一点:

person_name person_age, pet_name
Lisa, 8, Snowball I
Lisa, 8, Snowball II
Bart, 10, Santa's Little Helper

这应该是结果:

person_ID, person_name, person age
1, Lisa, 8
2, Bart, 10

pet_ID, pet_Name
1, Snowball I
2, Snowball II
3, Santa's Little Helper

person_ID, pet_ID
1, 1
1, 2
2, 3

我想知道python中是否有模块或某些代码来完成此任务。

编辑: 到目前为止,我的策略是创建一个带有格式化字符串的mySQL脚本。下面的代码显示了我如何创建INSERT脚本而不需要任何新的ID或密钥。

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import csv 

#set counter variable
cntr = 0

# open file to read
myfile = open('insert_bundesland.sql', 'w')

# Create header
myfile.write('INSERT INTO tbl_local (loc_gemeindeschl_ID, loc_bundesland_ID,      loc_bundesland, loc_stadt, loc_stadt_status, loc_einwohner, loc_einwohner_m, loc_einwohner_w)\n') 

# open csv file
with open('gem_schl.csv') as f:
    reader = csv.reader(f)
    # init for loop - loop over row
    for row in reader:
        # split if there is beside the name of city a status of the city
        x = str.split(row[3], ",")
        if len(x) == 1:
            # if there is no status assign NULL string value
            x.append('NULL')
        del row[3]
        x = row + x
        if  cntr == 0:
            cntr = cntr + 1
        else:
            if cntr == 1:
                # write sql statements 
                x = "\tVALUES\t(%s, %s, '%s', '%s', '%s', %s, %s, %s)\n" % (x[2], x[0], x[1], x[11], x[12], x[3], x[4], x[5])
                myfile.write(x)
                cntr = cntr + 1
            else:
                 x = "\t\t\t(%s, %s, '%s', '%s', '%s', %s, %s, %s)\n" % (x[2], x[0], x[1], x[11], x[12], x[3], x[4], x[5])
                 myfile.write(x)
myfile.write(';')
myfile.close()

1 个答案:

答案 0 :(得分:2)

模块csvsqlite3应该符合您的需求。这是一个示例:

{{1}}