Overvej at bygge forespørgslen dynamisk for at sikre, at antallet af pladsholdere matcher din tabel- og CSV-filformat. Så er det bare et spørgsmål om at sikre, at din tabel og CSV-fil er korrekte, i stedet for at tjekke, at du har skrevet nok ?
pladsholdere i din kode.
Følgende eksempel antager
- CSV-fil indeholder kolonnenavne i den første linje
- Forbindelsen er allerede bygget
- Filnavnet er
test.csv
- Tabelnavnet er
MyTable
- Python 3
...
with open ('test.csv', 'r') as f:
reader = csv.reader(f)
columns = next(reader)
query = 'insert into MyTable({0}) values ({1})'
query = query.format(','.join(columns), ','.join('?' * len(columns)))
cursor = connection.cursor()
for data in reader:
cursor.execute(query, data)
cursor.commit()
Hvis kolonnenavne ikke er inkluderet i filen:
...
with open ('test.csv', 'r') as f:
reader = csv.reader(f)
data = next(reader)
query = 'insert into MyTable values ({0})'
query = query.format(','.join('?' * len(data)))
cursor = connection.cursor()
cursor.execute(query, data)
for data in reader:
cursor.execute(query, data)
cursor.commit()