Seite 1 von 1

Variabler Wert lässt sich nicht in maria-DB eintragen

Verfasst: Sonntag 14. März 2021, 18:26
von Cortez
Hallo ihr Experten,

mich würde interessieren, was an meinem Skript hier falsch ist. Ich habe es mehr oder weniger direkt von einem Beispiel aus dem Internet übernommen, dennoch läuft es nicht.

Es geht einfach darum, in eine Testtabelle einer mariaDB-Datenbank einen Wert per Variable einzufügen. Das Ganze sieht so aus:

Code: Alles auswählen

db_connection = mariadb.connect(user="michi", password="geheim", database ="Datenbank1", host="localhost", port="3306")

cursor = db_connection.cursor()

cursor.execute("USE Datenbank1")

cursor.execute("SHOW TABLES")
for x in cursor:
        print(x)


sql = "INSERT INTO test (wert) VALUES (%s)"
val = ("hi")
cursor.execute(sql, val)
db_connection.commit()
Wenn ich einen festen Wert in das SQL-Statement schreibe, dann funktioniert es. Folgende Fehlermeldungen erscheinen:

Code: Alles auswählen

Traceback (most recent call last):
  File "db_test.py", line 49, in <module>
    cursor.execute(sql, val)
  File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/cursor.py", line 577, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/connection.py", line 695, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/connection.py", line 582, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%s)' at line 1
Das Ganze ist relativ nichtssagend. Ich verstehe auch echt nicht, was ich falsch gemacht habe... Habe auch schon das sql-statement hinten mit Strichpunkt versehen - auch das ohne Erfolg. Ich würde mich über Ratschläge sehr freuen.

Viele Grüße

Re: Variabler Wert lässt sich nicht in maria-DB eintragen

Verfasst: Sonntag 14. März 2021, 18:37
von DasIch
Der Traceback verweist auf eine Zeile 49 in deinem Code, dein Beispiel ist aber wesentlich kürzer. Dadurch kann man es nicht so leicht nachvollziehen wo genau das Problem ist.

Mit fällt allerdings folgendes in Auge:

Code: Alles auswählen

val = ("hi")
Hier fehlt ein Komma um daraus ein Tuple zu machen, so ist es nur ein String und äquivalent zu `val = "hi"`. Ich könnte mir vorstellen dass es deswegen zu dem Fehler kommt.

Re: Variabler Wert lässt sich nicht in maria-DB eintragen

Verfasst: Sonntag 14. März 2021, 18:49
von Cortez
Danke dir erstmal für deine Antwort. Das mit dem Tupel kann schon eine Idee sein, aber es muss halt nur ein Wert rein (Tabelle hat nur eine Spalte)

Habe mal den Code gekürzt, so dass die Zeilennummern nun stimmen müssten:

Code: Alles auswählen

import mysql.connector as mariadb

db_connection = mariadb.connect(user="michi", password="geheim", database ="Datenbank1, host="localhost", port="3306"

cursor = db_connection.cursor()

cursor.execute("USE Datenbank1")

cursor.execute("SHOW TABLES")
for x in cursor:
        print(x)


sql = "INSERT INTO test (wert) VALUES (%s)"
val = ("hi")
cursor.execute(sql, val)
db_connection.commit()
Die Fehlermeldungen:

Code: Alles auswählen

Traceback (most recent call last):
  File "db_test.py", line 16, in <module>
    cursor.execute(sql, val)
  File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/cursor.py", line 577, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/connection.py", line 695, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "/home/pi/.local/lib/python3.7/site-packages/mysql/connector/connection.py", line 582, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '%s)' at line 1

Re: Variabler Wert lässt sich nicht in maria-DB eintragen

Verfasst: Sonntag 14. März 2021, 18:52
von Sirius3
Es ist völlig egal, ob Du einen oder hundert Werte hast, execute erwartet ein Tuple (oder Liste) und keinen String als zweites Argument.

Re: Variabler Wert lässt sich nicht in maria-DB eintragen

Verfasst: Sonntag 14. März 2021, 18:57
von Cortez
Ok, dann müsste ich meine Variable also erst in eine Liste hinzufügen und diese Liste dann übergeben?

Re: Variabler Wert lässt sich nicht in maria-DB eintragen

Verfasst: Sonntag 14. März 2021, 19:06
von Sirius3
Das hat ja DasIch schon geschrieben, für ein Tuple fehlt ein Komma:

Code: Alles auswählen

val = ("hi",)

Re: Variabler Wert lässt sich nicht in maria-DB eintragen

Verfasst: Sonntag 14. März 2021, 19:16
von Cortez
Ach so, ok. Super, jetzt hab ichs hingekriegt. Vielen Dank euch beiden!