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()
ok Моя цель - импортировать каждый документ csv в виде таблицы в базу данных sqlite. Скажем, у меня их 100.динамический csv to sqlite импорт
Прямо сейчас мой код динамически пишет строки, но как я могу создать список 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]
Я видел этот вопрос, но мой отличаются, потому что имена полей имеют пробела в них, и они не могут быть takenout как многие из документов неизменяемые. Я также не хочу потерять форматирование списка, показанное ниже.
[(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 **]] –