【发布时间】:2013-06-03 23:49:36
【问题描述】:
with open((path + 'stuff.csv'),'r+') as fin1:
dr1 = csv.DictReader(fin1)
create1="CREATE TABLE LGD ("
exe1="INSERT INTO LGD ("
for a in dr1.fieldnames:
if a=='':
pass
elif ' ' in a:
create1+=a.replace(" ","")+','
exe1+=a.replace(" ","")+','
else:
create1 += a + ","
exe1+= a + ","
create1 = create1[:-1]
exe1=exe1[:-1]
create1 +=");"
exe1+=") VALUES ("
for a in range(len(dr1.fieldnames)-1):
exe1+='?'+","
exe1=exe1[:-1]
exe1+=");"
cur.execute(create1)
to_db1 = [(a[dr1.fieldnames[0]],a[dr1.fieldnames[1]],a[dr1.fieldnames[2]],a[dr1.fieldnames[3]],a[dr1.fieldnames[4]]) for a in dr1]
cur.executemany(exe1,to_db1)
conn.commit()
好的,我的目标是将每个 csv 文档作为表格导入 sqlite 数据库。假设我有 100 个。
现在我的代码动态写入字符串,但我如何创建 to_db1 列表,这样我就不必定义有多少列?
特别是这一行
to_db1 = [(a[dr1.fieldnames[0]],a[dr1.fieldnames[1]],a[dr1.fieldnames[2]],a[dr1.fieldnames[3]],a[dr1.fieldnames[4]]) for a in dr1]
我见过这个问题,但我的问题不同,因为字段名称中有空格,并且由于许多文档不可编辑,因此无法取出。我也不想丢失下面显示的列表格式。
[(stuff,stuff,stuff),(stuff,stuff,stuff)]
Dynamically import columns from csv into database table in sqlite3 and python
为了重申我的问题,我想创建 to_db1 列表而不在编译时定义列名。它应该以这种格式创建它
[(stuff,stuff,stuff),(stuff,stuff,stuff)]
在运行时。
【问题讨论】:
-
我不太明白你的问题。在创建表之前,您当然要了解需要多少列(可以动态添加新列,但我认为这不会解决您的问题)
-
我特别指出的那行穿过 csv 并抓取每一行的内容并将它们添加到列表中。在运行时,我希望它在没有我特别定义键的情况下创建列表 ex.a[dr.fieldnames[0]]
标签: python sqlite list dynamic csv