Ich habe ein Basisprogramm, das eine Datenbank abfragen soll, die Benutzerinformationen enthält. Ich versuche, die Informationen für einen bestimmten Benutzer auszuwählen und auf der Konsole auszugeben.Python MySQL Connector Datenbankabfrage mit% s schlägt fehl
Hier ist mein Code:
import mysql.connector
funcon = mysql.connector.connect(user='root', password='pass', host='127.0.0.1', database='fundata')
funcursor = funcon.cursor()
query = ("SELECT * FROM funtable WHERE userName=%s")
uName = 'user1'
funcursor.execute(query, uName)
for (userName) in funcursor:
print("{}".format(userName))
Ich habe das in einer Variablen gespeicherten Benutzername später, weil ich immer die Benutzername aus einem tkinter Eingabefeld planen. Wenn ich diesen Code ausführen bekomme ich folgende Fehlermeldung:
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1
ich versucht habe, in Anführungszeichen in der Abfrage das% s setzen, aber dann sucht es buchstäblich für ein ‚% s‘ Benutzername und gibt nichts zurück. Wie kann ich meinen Code ändern, sodass ich die Datenbank nur für diesen Benutzer abfragen kann?
Vielen Dank.
FYI: Ich benutze Python 3.3.
Vielen Dank. Das hat funktioniert. Kannst du erklären, warum das Komma notwendig ist? Ich habe es ohne Komma versucht und den gleichen Fehler bekommen. –
Das liegt daran, dass 'execute' eine Liste oder ein Tupel von Werten als zweites Argument erwartet. Das Komma erzeugt vor Ort ein Tupel, das die Anforderungen der Funktion abdeckt. "execute" weiß nicht, wie viele Zeichenfolgen in der Abfrage vor dem Lesen ersetzt werden müssen, und möchte Ihre Abfrage nicht zweimal lesen. Es fragt nur nach einer Abfrage und dann nach einer Liste oder einem Tupel von Strings. Selbst wenn Sie nur eine Zeichenfolge ersetzen möchten, müssen Sie sie zuerst in eine Liste oder ein Tupel aufnehmen, bevor Sie sie übergeben. – huu
OK. Danke für die Hilfe. –