Seite 1 von 3
Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 13:12
von ThoSchoo
Hey Leute,
Ich bin noch blutiger Anfänger, also seid nicht zu hart zu mir
Ich habe mit ein paar Freunden ein kleines Programm geschrieben, welches Tabellen in CSV Dateien ausspuckt.
Das ist auch soweit alles gut so.
Nun wollen wir aber noch diese Tabellen in den CSV Dateien in eine SQLIte Datenbank importieren.
I
ch habe mir bereits das habe Internet durchsucht, aber noch eine funktionierende Lösung gefunden.
Leider verzweifeln wir gerade an dieses Aufgabe :K :K
Ich hoffe ihr könnt uns/mir dort weiterhelfen
Beste Grüße
ThoScho
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 13:21
von Sirius3
@ThoSchoo: woran scheitert es denn? Am SQL? Habt ihr schon die Beispiele der
Dokumentation angeschaut?
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 13:35
von ThoSchoo
Also wir haben mal das hier ausprobiert:
Code: Alles auswählen
import csv
import sqlite3
con = sqlite3.connect("LGORT")
cur = con.cursor()
cur.execute("CREATE TABLE invoice (col1 INTEGER, col2 TEXT, col3 INTEGER);")
with open('tbl_LGORT.csv') as fin:
dr = csv.DictReader(fin)
to_db = [(i["col1"], i["col2"], i["col3"]) for i in dr]
cur.executemany("Insert into invoice (col1, col2, col3 Values (?, ?, ?);", to_db)
con.commit()
Es wird uns allerdings immer wider dieser Fehler ausgespuckt:
Code: Alles auswählen
cursor.execute('INSERT INTO prices VALUES (?,?,?)', [t])
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 3, and there are 1 supplied.
hier haben wir uns nun aber auch auf eine der CSV Dateien beschränket, also auch nichts allgemein verwendbares geschrieben.
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 13:50
von Sirius3
@ThoSchoo: beim gezeigten Code fehlt eine Klammer. Und die Fehlerzeile gibt es darin nicht. Sonst funktioniert bei mir alles einwandfrei.
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 14:14
von ThoSchoo
@Sirius3 Wo fehlt dort eine Klammer ?
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 15:20
von pillmuncher
@ThoSchoo: Das kannst du leicht selber herausfinden:
Gehe von links nach rechts alle Zeichen durch. Beginne bei n=0 zu zählen. Für jede öffnende Klammer addiere 1 zu n. Für jede schließende Klammer subtrahiere 1 von n. Sobald n < 0 wird, gibt es eine schließende Klammer zuviel. Wenn am Ende n > 0 ist, gibt es n schließende Klammern zuwenig.
Dieser Algorithmus zeigt einem zwar nicht, wo genau ein Klammerungsfehler ist, aber man kann ihn auch auf Teilausdrücke anwenden, von denen man vermutet, dass dort der Fehler liegen könnte. In deinem Fall zB. bei dem Teilausdruck (col1, col2, col3...
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 15:26
von Hyperion
In Zeile 13 hinter ``col3``
An eurer Namenswahl solltet ihr aber dringend arbeiten! ``fin``, ``dr```und ganz schlimm ``i`` sind keine guten Namen; sie sagen entweder nichts sinnvolles aus oder sind als Abkürzungen wenig sinnvoll... versucht den Objekten deskriptive Namen zu geben. Statt ``fin`` geht evtl. noch so, aber ``input_file`` tut als Name ja nicht weh. Wenn man den Inhalt aufgrund der Domäne genauer kennt, könnte man den auch im Namen verwursten. Statt ``dr`` reicht doch eigentlich ``reader`` - genau das verbirgt sich dahinter; auch hier gilt, dass man ggf. mittels des Inhalts einen noch besseren Namen finden könnte. Aufgrund des Tabellennamens könnte ich mir ``invoices`` vorstellen. Statt ``i`` dann ``invoice`` oder wenigstens neutral ``row``.
Auch im SQL-Teil sind die Namen... naja... schlecht, ``col1`` usw. Sinnvoller wären Namen, die aussagen, *was* in der jeweiligen Spalte inhaltlich gespeichert wird.
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 17:22
von ThoSchoo
Viele Dank für de Tipps !!
Hab es nun auch soweit alles um gesetzt:
Code: Alles auswählen
import csv
import sqlite3
con = sqlite3.connect("LGORT")
cur = con.cursor()
cur.execute("CREATE TABLE ivoice (Lgort_id INTEGER, City TEXT, Werks_id INTEGER);")
with open('tbl_LGORT.csv') as input_file:
reader = csv.DictReader(input_file)
to_db = [(i["Lgort_id"], i["City"], i["Werks_id"]) for i in reader]
cur.executemany("Insert into invoice (Lgort_id, City, Werks_id) Values (?, ?, ?);", to_db)
con.commit()
Doch nun gibt er mir diesen Fehler aus:
to_db = [(i["Lgort_id"], i["City"], i["Werks_id"]) for i in reader]
KeyError: 'Lgort_id'
:K :K
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 17:32
von BlackJack
@ThoSchoo: Und was steht da in der CSV-Datei?
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 17:34
von pillmuncher
Schau mal genau hin:
ThoSchoo hat geschrieben:Code: Alles auswählen
... CREATE TABLE ivoice ...
... Insert into invoice ...
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 17:55
von ThoSchoo
@BlackJack
Hier mal ein Beispiel des Inhaltes:
LGORT_ID;City;WERKS_ID
1;Nuernberg;1
2;Nuernberg;1
3;Nuernberg;1
4;Nuernberg;1
5;Nuernberg;1
6;Nuernberg;2
7;Nuernberg;2
8;Nuernberg;2
9;Nuernberg;2
10;Nuernberg;2
11;Nuernberg;3
12;Nuernberg;3
13;Nuernberg;3
14;Nuernberg;3
15;Nuernberg;3
16;Nuernberg;4
17;Nuernberg;4
18;Nuernberg;4
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Freitag 8. Januar 2016, 18:46
von BlackJack
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Samstag 9. Januar 2016, 14:47
von ThoSchoo
@BlackJack

versteh irgendwie nicht ganz was du mir damit sagen möchtest
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Samstag 9. Januar 2016, 14:55
von pillmuncher
ThoSchoo hat geschrieben:@BlackJack

versteh irgendwie nicht ganz was du mir damit sagen möchtest
Vermutlich das hier:
Code: Alles auswählen
In [1]: data = {'LGORT_ID': 123}
In [2]: data['LGORT_ID']
Out[2]: 123
In [3]: data['Lgort_id']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-3-900b157b19d7> in <module>()
----> 1 data['Lgort_id']
KeyError: 'Lgort_id'
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Samstag 9. Januar 2016, 15:27
von ThoSchoo
Sorry bin leider echt blutiger Anfänger
versteh es trotzdem nicht
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Samstag 9. Januar 2016, 15:40
von BlackJack
@ThoSchoo: Ich wüsste nicht wie man das noch einfacher demonstrieren könnte warum das nicht funktioniert. Du versuchst im Programm auf einen Schlüssel zuzugreifen den es in dem Wörterbuch nicht gibt (→ `KeyError`) weil die Schreibweise in der CSV-Datei eine andere ist und `dict` nun mal auf Gleichheit testet wenn man über einen Schlüssel zugreift.
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Samstag 9. Januar 2016, 15:49
von Sirius3
@ThoSchoo: und was hatten wir gerade über unsinnige Abkürzungen? Liebe-Grüße-Orte scheint was romantisches zu sein, dafür eine ID zu vergeben eher weniger

.
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Sonntag 10. Januar 2016, 12:43
von ThoSchoo
@BlackJack
Ahh nun check ich es .. Sorry für das Brett vor meinem Kopf
Aber wie kann ich dieses Problem umgehen bzw. es lösen ?
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Montag 11. Januar 2016, 17:58
von Üpsilon
Na indem du den Spaltennamen richtig schreibst

also LGORT_ID statt Lgort_Id
Re: Tabellen aus CSV Dateien in SQLite Datenbanken importieren
Verfasst: Montag 11. Januar 2016, 19:43
von ThoSchoo
@Üpsilon
das ändert leider nichts ... der Fehler bleibt der selbe