Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[Python-de] sqlite3-datenbank

6 views
Skip to first unread message

Detlef Heiler

unread,
Feb 8, 2024, 1:39:20 PM2/8/24
to
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



Hartmut Goebel

unread,
Feb 9, 2024, 4:07:17 AM2/9/24
to
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-bring-your-own-device/

Peter J. Holzer

unread,
Feb 9, 2024, 12:37:30 PM2/9/24
to
On 2024-02-08 18:31, Detlef Heiler <detlef...@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

Hartmut Goebel

unread,
Feb 10, 2024, 9:17:03 AM2/10/24
to
Hallo Detlef,

Du hast mir privat geantwortet, nicht an die Liste. Wenn Du privaten
Support haben möchtest, können wir das gerne kostenpflichtig
arrangieren, ebenso Vidoe-Mentorin. Ansonsten gilt die Regel: Kostenlose
Hilfe gibt es nur öffentlich.

Zu Deinem Code:

Er ist sehr, sehr unübersichtlich. Du möchtest frühzeitig lernen, wie
man lesbarer schreibt, z.B. indem Du F-Strings verwendest oder kürzere
Variablennamen verwendest. Dann erkennst Du auch leichter den Fehler:

> datenfeldstring = eingabe1 + " " + "varchar(" + eingabe2 + "), "

Hier wird der bisherig String überschrieben. D. h. der
"erzeugungsbefehl" enthält immer nur den Namen der letzten Spalte.

Noch ein paar Tipps:

* print() ist für Debugging sehr, sehr, hilfreich
* das Module pdb der Standard-Bibliothek ist auch hilfreich, um Fehler
zu finden.
* Du möchtest die "join" Methode von Strings kennenlernen und Dir
diverse Schleifen in Deinem Code sparen

--
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/openstreetmaps-hat-google-maps-weit-ueberholt/

Kolumne:
https://www.goebel-consult.de/blog/cissp-gefluester/2011-10-aus-der-schublade-in-die-koepfe/

Detlef Heiler

unread,
Feb 19, 2024, 5:45:19 AM2/19/24
to
Hallo Hartmut und Peter,

vielen Dank für Eure Tipps! Mein Fehler war ein verdoppeltes Tuple, und als ich das berichtigt hatte, hatte ich trotz dem noch den alten Fehler, der wiederum darauf beruhte, dass ich mit der falsch erzeugten Datei weiter arbeiten wollte; als ich das erkannt habe, habe ich sie komplett gelöscht, und nun funktioniert es. Vielen Dank!

VG Detlef


-----Ursprüngliche Nachricht-----
Von: Hartmut Goebel <h.go...@goebel-consult.de>
Gesendet: Samstag, 10. Februar 2024 15:11
An: Die Deutsche Python Mailingliste <pyth...@python.org>
Betreff: [Python-de] Re: sqlite3-datenbank
_______________________________________________
python-de Mailingliste -- pyth...@python.org Zur Abmeldung von dieser Mailingliste senden Sie eine Nachricht an python-...@python.org https://mail.python.org/mailman3/lists/python-de.python.org/
Mitgliedsadresse: detlef...@t-online.de

0 new messages