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)]
sqlite3およびpythonで、csvからデータベーステーブルに列を動的にインポートします
私の質問を言い換えると、コンパイル時に列名を定義せずに to_db1 リストを作成したいと思います。この形式で作成する必要があります
[(stuff,stuff,stuff),(stuff,stuff,stuff)]
実行時に。