Overweeg om de query dynamisch op te bouwen om ervoor te zorgen dat het aantal tijdelijke aanduidingen overeenkomt met uw tabel- en CSV-bestandsindeling. Dan is het gewoon een kwestie van ervoor zorgen dat je tabel en CSV-bestand correct zijn, in plaats van te controleren of je genoeg hebt getypt ?
tijdelijke aanduidingen in uw code.
In het volgende voorbeeld wordt ervan uitgegaan dat
- CSV-bestand bevat kolomnamen in de eerste regel
- Verbinding is al gemaakt
- Bestandsnaam is
test.csv
- Tafelnaam is
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()
Als kolomnamen niet in het bestand zijn opgenomen:
...
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()