In eine MariaDB einen Datensatz mit nur einem Feld einfügen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
ESP8266Schwabe
User
Beiträge: 16
Registriert: Sonntag 20. Oktober 2019, 11:24

Donnerstag 6. Mai 2021, 17:46

Moin,

Code: Alles auswählen

cur.execute("INSERT INTO balkonkw VALUES (power)", (powerwert))
bringt mir einen Syntaxfehler.

An anderer Stelle habe ich gelesen, dass es daran läge, dass ich versuche nur einen Wert zu übergeben.
Man müsse das ohne "INSERT INTO" machen.

Wie wäre denn der genaueSyntax dafür. Ich finde einfach kein einziges Beispiel, bzw. irgend ein HowTo wie man einen Datensatz mit einem Feld einfügt.
Benutzeravatar
sparrow
User
Beiträge: 2745
Registriert: Freitag 17. April 2009, 10:28

Donnerstag 6. Mai 2021, 17:58

Was sagt denn die Dokumentation wie das geht?
narpfel
User
Beiträge: 405
Registriert: Freitag 20. Oktober 2017, 16:10

Donnerstag 6. Mai 2021, 19:02

@ESP8266Schwabe: Achtung, nicht die Klammer macht das Tupel, sondern das Komma. Ohne Komma kein Tupel.
ESP8266Schwabe
User
Beiträge: 16
Registriert: Sonntag 20. Oktober 2019, 11:24

Donnerstag 6. Mai 2021, 19:21

Ich tu mir mit dem Englisch schwer (wegen der verlinkten Dokumentation).

Ein funktionierendes Beispiel finde ich nirgends. Habe hier und da Kommas gesetzt, oder auch nicht. Klammern und Bezeichnungen getauscht.

Habe aber einen Kumpel der gut im Programmieren ist. Dem schick ich jetzt mein Problem.

Ich werde dann hier die Lösung posten.
Sirius3
User
Beiträge: 14826
Registriert: Sonntag 21. Oktober 2012, 17:20

Donnerstag 6. Mai 2021, 19:37

Es sollte `cursor` heißen, nicht `cur`. Der richtige SQL-Ausdruck ist `INSERT INTO balkonkw (power) VALUES (%s)` wobei balkonkw so aussieht, als ob Du eigentlich Informationen in den Tabellennamen hineinkodiert hast, anstatt dafür eine Tabellenspalte zu verwenden. Nur power in einer Tabelle zu speichern ist nicht sehr sinnvoll. Wie sieht denn Dein Datenbankdesign aus?

Alles in allem müßte das so aussehen:

Code: Alles auswählen

cur.execute("INSERT INTO balkonkw (power) VALUES (%s)", (powerwert,))
ESP8266Schwabe
User
Beiträge: 16
Registriert: Sonntag 20. Oktober 2019, 11:24

Donnerstag 6. Mai 2021, 21:42

Ich habe alles durchprobiert. Diese Variante natürlich nicht.

Danke für die Lösung!

In meiner Tabelle gibt es 3 Felder. Die 'id' als Primärschlüssel, den 'power' in dem ich die Leistung speichere und einen 'timestamp' mit demselben.

Das Script rufe ich auf meinem Raspberry pi (der sowieso 24/7 läuft) mit einem Cronjob alle 5 Minuten auf.

Mehr Daten brauch ich nicht. Die Steckdose, welche mir den Power Wert liefert, hätte noch eine Temperatur im Angebot, brauch ich aber nicht.

Die Tabelle werde ich über eine lokale Webseite auswerten.

Der powerwert kommt übrigens aus einem mystrom switch, der kann ein Solarkraftwerk überwachen. Bisher in der Cloud des Herstellers. Das will ich ändern.
Antworten