我试图弄清楚如何将数据从CSV文件加载到SQL数据库中。
我目前使用Sqlite3,因为我还无法安装pymssql。到目前为止,这是我的代码:
import csv, sqlite3
con = sqlite3.connect("aerzte.db")
cur = con.cursor()
#cur.execute("""CREATE TABLE liste (id INTEGER PRIMARY KEY, Anrede TEXT, Titel TEXT, Titel2 TEXT, Vorname TEXT, Name TEXT, Praxis TEXT, Straße TEXT, PLZ TEXT, Ort TEXT);""")
with open('arztliste.csv', 'r') as f:
file = csv.reader(f)
columns = next(file)
query = 'insert into liste({0}) values ({1})'
query = query.format(','.join(columns), ','.join('?' * len(columns)))
for data in file:
cur.execute(query, data)
cur.commit()
con.commit()
con.close()
我的CSV文件如下:
Anrede;Titel;Titel2;Vorname;Name;Praxis;Straße;PLZ;Ort;
Herr;Dr.;med.;Norbert;Braunisch;CoMedicum Landshuter Allee GmbH; Landshuter Allee 45;80637;München;
第一行是带有列值的Header。之后,应该插入这些列的“真实”数据。我也很容易创建数据库,表和列。 我认为由于不同列值之间的分号而无法加载数据。我已经用“,”代替了它们,但是最后缺少分号来结束这一行。 我希望尽快得到任何建议。 谢谢。
答案 0 :(得分:1)
使用csv.DictReader使得工作比阅读器更简单,并且我将其从分号更改为逗号,以防万一您要使用分号,请在阅读器对象中指定分隔符
with open('arztliste.csv', 'r') as f:
file = csv.Dicteader(f)
csv_data = []
for element in file :
csv_data.append(element)
csv_data现在包含字典列表,其中键是csv文件的标题,而值是“实际”数据。
一旦获得正确的数据,就很容易将其转储到sqldb中,
query ='INSERT INTO table_name(Anrede,Titel,Titel2,Vorname,Name,Praxis,Straße,PLZ,Ort) VALUES(%s,%s,%s,%s,%s,%s,%s,%s)'
浏览值
for data in csv_data:
cur.execute(query,data['Anrede'],data['Titel'],data['Titel2']...data['Ort'])
答案 1 :(得分:1)
Python csv模块允许您声明定界符。而且,由于在行尾添加了其他分号,因此您将在每一行中获得一个必须忽略的附加字段。
提交游标没有意义:您只能在连接级别进行提交。您必须选择是否要在每行(不常见)之后,第n行的文件末尾(可能使用内存)提交(使用计数器)。因此,您的代码应成为(使用最后一个选项)
...
counter = 20 # commit every 20-th row
with open('arztliste.csv', 'r') as f:
file = csv.reader(f, delimiter=";") # declare delimiter
columns = next(file)[:-1] # ignore last (empty) field
query = 'insert into liste({0}) values ({1})'
query = query.format(','.join(columns), ','.join('?' * len(columns)))
for data in file:
cur.execute(query, data[:-1]) # ignore last (empty) field
counter -= 1
if counter == 0:
con.commit()
counter = 20
con.commit()
con.close()