SQL Abfrage - ValueError: operation parameter must be str

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Woddy
User
Beiträge: 5
Registriert: Sonntag 29. März 2015, 22:36

Komme hier nicht weiter:

Code: Alles auswählen

#!/usr/bin/env python3
import os, sys, sqlite3


if not os.path.exists("konto.db"):
    print("Datei nicht vorhanden")
    sys.exit(0)
    
#Verbindung zu Datenbank aufbauen
connection = sqlite3.connect("konto.db")
#Zeiger sendet Befehle an die Datenbank
cursor=connection.cursor()

nummer=111


sql = "SELECT * FROM personen WHERE kontonummer=?", (nummer)
cursor.execute(sql)



for dsatz in cursor:
    print(dsatz[0], dsatz[1], dsatz[2], dsatz[3], dsatz[4],)

connection.close()
ValueError: operation parameter must be str
BlackJack

@Woddy: `sql` muss eine Zeichenkette sein. Und Du möchtest `execute()` mit zwei Argumenten aufrufen statt nur mit einem — eben der SQL-Anweisung als Zeichenkette und eine Sequenz mit einem Element für den Platzhalter im SQL. Kleiner Tipp: Klammern machen kein Tupel, mit einer einzigen Ausnahme: dem leeren Tupel.
Woddy
User
Beiträge: 5
Registriert: Sonntag 29. März 2015, 22:36

BlackJack hat geschrieben:@Woddy: `sql` muss eine Zeichenkette sein. Und Du möchtest `execute()` mit zwei Argumenten aufrufen statt nur mit einem — eben der SQL-Anweisung als Zeichenkette und eine Sequenz mit einem Element für den Platzhalter im SQL. Kleiner Tipp: Klammern machen kein Tupel, mit einer einzigen Ausnahme: dem leeren Tupel.
Hmmm,...Danke für die Hilfe.
Also ich habe es ein wenig abgeändert und bin etwas weiter.

Code: Alles auswählen

.......
kontonummer=511001099
passwort=1234  

sql = "SELECT * FROM personen WHERE kontonummer=? AND passwort=?"
cursor.execute(sql, (kontonummer, passwort))


for dsatz in cursor:
    print(dsatz[3])

connection.close()
Funktioniert. Aber es funktioniert nicht mit einer Variabel!
Also:

Code: Alles auswählen

sql = "SELECT * FROM personen WHERE kontonummer=?"
cursor.execute(sql, (kontonummer))
Wo liegt da der Fehler?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hat BlackJack doch schon geschrieben: Klammern erstellen keine Tupel, mit Ausnahme des leeren Tupels. Mit Kommas sind dis Syntax für Tupel. In deinem Fall also

Code: Alles auswählen

cursor.execute(sql, (kontonummer,))
Das Leben ist wie ein Tennisball.
Woddy
User
Beiträge: 5
Registriert: Sonntag 29. März 2015, 22:36

Ajajajaaajaj! Vielen Dank. :idea:
Das war eine lange Geburt.
Antworten