Hallo zusammen, ich bin Anfänger, und deswegen eine leichte Frage an Euch Freaks: Ich möchte eine Datenbank mit eingelesenen bzw. abgefragten Variablen erstellen, und z. B. auch die Feldüberschriften in die Datenbank speichern, damit, wenn die Datenbank wieder geöffnet wird, auch weiß, welche Feldüberschriften es gibt, aber da macht mir das System einen Strich durch die Rechnung: zeiger.executemany(dateneinfuegung + listenname + werte, ueberschriftenliste) sqlite3.OperationalError: table Geburtstage has 1 columns but 3 values were supplied Wie man sehen kann, habe ich den Executemany-String in Form der Variable dateneinfuegung gespeichert, woe auch die Variable Listenname, die den Namen der Liste enthält. Danach kommen ja die Values, die in runden Klammern, als Fragezeichen zusammengefasst sind; dann folgt ein Trennungskomma, um den nächsten Parameter zu bringen, was eine verschachtelte Liste sein soll Tja, wie kriege ich die verschachtelte Liste in die Datenbank? Bin sehr gespannt. LG Detlef
Am 08.02.24 um 19:31 schrieb Detlef Heiler:
sqlite3.OperationalError: table Geburtstage has 1 columns but 3 values were supplied
Das steht recht klar, dass die Tabelle nur eine Spalte hat, Du aber drei einfügen möchtest. sind die "Zeilen" in "data" unten bei Dir ganz sicher Tupel oder Listen? Tupel mit nur einem Element brauchen am Ende, noch innerhalb der Klammern ein Komma, um ein Tupel zu bilden: data = [ ("zzzz"), # kein Tupel! ("aaaa",), # <-- Komma in der Klammer ["bbb"], # Listen werden an den eckigen Klammern erkannt, daher kein Komma nötig ]
Tja, wie kriege ich die verschachtelte Liste in die Datenbank? Bin sehr gespannt.
Wenn Du Deinen Code gepostet hättest, könnten wir genauer sagen, was falsch ist. So kann ich nur mit dem Code-Schnipsel aus dem Python-Handbuch antworten. Im Prinzip muss es so aussehen: data = [ ("Monty Python Live at the Hollywood Bowl", 1982, 7.9), ("Monty Python's The Meaning of Life", 1983, 7.5), ("Monty Python's Life of Brian", 1979, 8.0), ] cur.executemany("INSERT INTO movie VALUES(?, ?, ?)", data) con.commit() # Remember to commit the transaction after executing INSERT. -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP, ISO 27001 Lead Implementer Information Security Management, Security Governance, Secure Software Development Goebel Consult, Landshut http://www.goebel-consult.de Blog: https://www.goebel-consult.de/blog/2019/blockchain-bringts-nicht/ Kolumne: https://www.goebel-consult.de/blog/cissp-gefluester/2011-08-horrorszenario-b...
On 2024-02-08 18:31, Detlef Heiler <detlef.heiler@t-online.de> wrote:
Ich möchte eine Datenbank mit eingelesenen bzw. abgefragten Variablen erstellen, und z. B. auch die Feldüberschriften in die Datenbank speichern, damit, wenn die Datenbank wieder geöffnet wird, auch weiß, welche Feldüberschriften es gibt, aber da macht mir das System einen Strich durch die Rechnung:
zeiger.executemany(dateneinfuegung + listenname + werte, ueberschriftenliste)
sqlite3.OperationalError: table Geburtstage has 1 columns but 3 values were supplied
Wie man sehen kann,
Nein, können wir nicht sehen.
habe ich den Executemany-String in Form der Variable dateneinfuegung gespeichert, woe auch die Variable Listenname, die den Namen der Liste enthält. Danach kommen ja die Values, die in runden Klammern, als Fragezeichen zusammengefasst sind; dann folgt ein Trennungskomma, um den nächsten Parameter zu bringen, was eine verschachtelte Liste sein soll
Bitte keine Beschreibung, was Du gemacht hast (bei der man dann hoffen muss, dass Du das richtig beschreibst und man Deine Beschreibung richtig versteht), sondern lauffähigen Code. (auch inklusive der Tabellendefinition: Eine Tabelle mit nur einer Spalte scheint mir etwas eigenwillig zu sein.) hp
participants (3)
-
Detlef Heiler
-
Hartmut Goebel
-
Peter J. Holzer