Python Liste in SQLite3 DatenBank schreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
h0rnung
User
Beiträge: 46
Registriert: Mittwoch 28. Mai 2014, 11:41

Servus zusammen,

Ich habe eine Python Liste die wie Folgt aufgebaut ist: (Name, Alter, Augenfarbe)

Praktisch sieht das ganze so aus:

Code: Alles auswählen

import sqlite3

connection = sqlite3.connect('dummy.db')
pointer = connection.cursor()

def main():
    
    dummy = "[(u'Felix', u'eins', u'braun'),(u'Marc', u'zwei', u'blau'),(u'Stefan', u'eins', u'blau'),(u'Bjoern', u'eins', u'gruen')]"
    print dummy
    pointer.execute("CREATE TABLE dummy(Name TEXT, Alter TEXT, Augenfarbe TEXT)")
    pointer.execute("INSERT INTO tabelle(Datestamp, Title, Text) VALUES(?,?,?)",
    # (Hier fehlt der Code ?????)
    connection.commit()
   
main()
Wie muss ich den pointer definieren, dass er die Liste richtig auslesen kann oder muss ich die Liste erst aufloesen. Ich will die Daten aus der Liste auslesen und nicht direkt in die Tabelle eingeben, da dass hier nur ein Beispiel ist und die richtige Liste natuerlich viel groesser ist.

Vor allem Code Beispiele bringen mir immer enorm viel!

Vielen Danke fuer die grossartige Hilfe
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Cursor haben eine executemany-Methode, dort kannst du die ganze Liste übergeben. Das von dir gewünschte Codebeispiel befindet sich in der sqlite-Dokumentation von Python ;-)

Du solltest dir angewöhnen dich etwas präziser auszudücken. Über den Absatz
h0rnung hat geschrieben:Wie muss ich den pointer definieren, dass er die Liste richtig auslesen kann oder muss ich die Liste erst aufloesen. Ich will die Daten aus der Liste auslesen und nicht direkt in die Tabelle eingeben, da dass hier nur ein Beispiel ist und die richtige Liste natuerlich viel groesser ist.
musste ich etwas länger grübeln. Mir war überhaupt nicht klar auf was du hinaus wolltest, das ist alles recht wirr geschrieben. Vielleicht solltest du deine Texte vor dem Abschicken noch einmal durchlesen und dir überlegen, ob ein Außenstehender dein Problem überhaupt verstehen kann.

Pointer sind in der Informatik übrigens ein feststehender Begriff und gehören nicht in diesen Kontext. Verwende besser den Begriff "Cursor", dann weiß jeder was gemeint ist. Du solltest dir nicht angewöhnen Begriffe für dich selbst zu definieren, das bringt jede Menge Kommunikationsschwierigkeiten ;-)
Das Leben ist wie ein Tennisball.
h0rnung
User
Beiträge: 46
Registriert: Mittwoch 28. Mai 2014, 11:41

Nicht ganz die Antwort die ich erwartet habe ... dennoch sehr hilfreich. Danke fuer den Tipp. Ich schau mal ob ich das BSP finde ... sonst komme ich nochmal auf dich zurueck. Du hast nicht zufaellig gerade den richtigen Link parat :)

Gruesse

Ps: War gestern schon spaet. Haette die Frage vllt heute morgen mit klarem Kopf einstellen sollen :P
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

h0rnung hat geschrieben:Nicht ganz die Antwort die ich erwartet habe ...
Suchtest du vielleicht einfach eine Schleife über alle Einträge in der Liste dummy?

Code: Alles auswählen

for entry in dummy:
    print entry
    # insert into database
    ...
h0rnung
User
Beiträge: 46
Registriert: Mittwoch 28. Mai 2014, 11:41

Danke fuer die Hilfe. So funktionierts, falls es mal jemand nachlesen will :)

Code: Alles auswählen

import sqlite3

connection = sqlite3.connect('test.db')
pointer = connection.cursor()

pointer.execute("CREATE TABLE test(A TEXT, B TEXT, C TEXT)")

def main():
    
    dummy = [(u'Felix', u'eins', u'braun'),(u'Marc', u'zwei', u'blau'),(u'Stefan', u'eins', u'blau'),(u'Bjoern', u'eins', u'gruen')]
    print dummy
    for item in dummy:
        pointer.execute("INSERT INTO test(A, B, C) VALUES(?,?,?)",item)
    connection.commit()
   
main()
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und jetzt schaust du dir noch einmal die von mir bereits genannte executemany-Methode an und sparst dir die unnötige Schleife ;-)
Das Leben ist wie ein Tennisball.
BlackJack

@h0rnung: Halte ich für keine so gute Lösung weil genau für diesen Fall `executemany()` gedacht ist. Und `pointer` sollte `cursor` heissen. Und `dummy` ist normalerweise ein Name für Werte die nicht verwendet werden, oder wenn der Wert tatsächlich irgendwie einen Dummy darstellt.
Antworten