Hallo
Ich Bin gerade dabei mit Python ein Spiel zu programmieren und bin beim Login
Ich habe nun eine Registrierungs Funktion programmiert wo Benutzername und Passwort in eine Sqlite Datenbank im einer Tabelle(Users) abgespeichert wird
Nun möchte ich nachdem man im Login bildschirm den username angegeben hat überprüfen ob der Benutzername überhaupt in der Tabelle(Users) existiert
Ich wehre sehr dankbar wenn mir jemand helfen könnte
Sqlite3: schaun ob der eingegebene Username vorhanden ist
Hast du ein Grundlagentutorial zu SQL durchgearbeitet? Wenn du eine Datenbank nutzen willst, wirst du dich wenigstens ein bisschen damit beschaeftigen muessen. Wir helfen gerne deine Tabellen-Struktur und Abfragen zu pruefen, aber DB-Design frei Haus gibt's eher nicht.
Ja
Ich habe ein tutorial durcharbeitet
Habe aber nichts zu Überprüfungen gefunden
Und deshalb beschlossen zuerst die Registrierung zu machen.
Hättest du vielleicht eine seite wo was dazu drin steht und könntest du mir einen Link geben
Ich habe ein tutorial durcharbeitet
Habe aber nichts zu Überprüfungen gefunden
Und deshalb beschlossen zuerst die Registrierung zu machen.
Hättest du vielleicht eine seite wo was dazu drin steht und könntest du mir einen Link geben
Ich glaube nicht, dass du ein Tutorial findest, das genau beschreibt, was du willst.
Weisst du, wie du Daten in eine SQL Tabelle bekommst?
Weisst du, wie du Daten aus einer Tabelle abfragst?
Weisst du, wie du Daten aus einer Tabelle abfragst unter einer Bedingung (Stichwort: WHERE)?
Weisst du, wie du Daten in eine SQL Tabelle bekommst?
Weisst du, wie du Daten aus einer Tabelle abfragst?
Weisst du, wie du Daten aus einer Tabelle abfragst unter einer Bedingung (Stichwort: WHERE)?
Weisst du, wie du Daten in eine SQL Tabelle bekommst?: ja
Weisst du, wie du Daten aus einer Tabelle abfragst?
: ein bisschen
Weisst du, wie du Daten aus einer Tabelle abfragst unter einer Bedingung (Stichwort: WHERE)?: ich glaube WHERE verwendet mann als WENN aber nicht Wenn im Sinne von if sondern eher wenn blablblabla = ? Ist um es später zu bestimmen
Weisst du, wie du Daten aus einer Tabelle abfragst?
: ein bisschen
Weisst du, wie du Daten aus einer Tabelle abfragst unter einer Bedingung (Stichwort: WHERE)?: ich glaube WHERE verwendet mann als WENN aber nicht Wenn im Sinne von if sondern eher wenn blablblabla = ? Ist um es später zu bestimmen
Das ist jezt nur eine ide zu der ich nachher noch eine Frage habe
try:
...
sql="SELECT Username FROM Users WEHRE Username = Variable"
...
except:
print (" Der Username ist nicht vorhanden bitte Registriere dich erst")
Aber wie mache ich das mit der variable in dem SQL code?
try:
...
sql="SELECT Username FROM Users WEHRE Username = Variable"
...
except:
print (" Der Username ist nicht vorhanden bitte Registriere dich erst")
Aber wie mache ich das mit der variable in dem SQL code?
-
- User
- Beiträge: 168
- Registriert: Montag 9. Mai 2016, 09:14
- Wohnort: Berlin
Hallo,
wenn du dein SQL Statement so ausführst wird folgender Fehler kommen:
[codebox=mysql file=Unbenannt.sql]
SELECT Username FROM Users WEHRE Username = User1;
#1054 - Unknown column 'User1' in 'where clause'
[/code]
Mysql hält deinen User1 für eine Spalte. Also müssen noch " mit in den String.
Wie macht man das denn in Python mit Variablen?
wenn du dein SQL Statement so ausführst wird folgender Fehler kommen:
[codebox=mysql file=Unbenannt.sql]
SELECT Username FROM Users WEHRE Username = User1;
#1054 - Unknown column 'User1' in 'where clause'
[/code]
Mysql hält deinen User1 für eine Spalte. Also müssen noch " mit in den String.
Wie macht man das denn in Python mit Variablen?
Fuer die Variable brauchst du einen Platzhalter.
Code: Alles auswählen
cursor.execute("SELECT password FROM users WHERE name = ?", (benutzername,))
Code: Alles auswählen
Code: Alles auswählen
Code: Alles auswählen
def testUsername(self, username, password, User):
assert(isinstance(username,str))
assert(isinstance(password,str))
assert(isinstance(User,str))
try:
self.cursor.execute("SELECT password FROM Users WHERE Username =?"(User))
self.conn.commit()
except:
print("Username ist nicht vorhanden")
Das liegt daran, das du etwas tust, das man NIEMALS tun sollte, ausser man weiss, was man macht:
Ohne das man einen vernuenftige Fehlerbehandlung macht verdeckt ein solches all-umfassendes abfangen von Fehlern auch Programmierfehler. Und du hast davon mindestens zwei. Schau mal auf die Kommas die ich verwende, und wo ich die verwende, und wo du die machst. Und da kommt ein Fehler bei rum.
Das ganze kann man auch *OHNE* try/except (selbst ein vernuenftiges) schreiben, weil die DB eben nix zurueckliefert, wenn sie den Namen nicht kennt. Also schmeiss das try/except raus, und reparier die Bugs, und dann pruef ueber die Anzahl der gelieferten Ergebnisse welchen Fall du hast.
Code: Alles auswählen
try:
...
except: # OHNE KONKRETE EXCEPTION ALLES ABFANGEN!
Ohne das man einen vernuenftige Fehlerbehandlung macht verdeckt ein solches all-umfassendes abfangen von Fehlern auch Programmierfehler. Und du hast davon mindestens zwei. Schau mal auf die Kommas die ich verwende, und wo ich die verwende, und wo du die machst. Und da kommt ein Fehler bei rum.
Das ganze kann man auch *OHNE* try/except (selbst ein vernuenftiges) schreiben, weil die DB eben nix zurueckliefert, wenn sie den Namen nicht kennt. Also schmeiss das try/except raus, und reparier die Bugs, und dann pruef ueber die Anzahl der gelieferten Ergebnisse welchen Fall du hast.
@MupfSpace: der Fehler ist, dass man NIEMALS nackte excepts benutzen darf, weil man damit auch etliche Programmierfehler abfängt, wie hier z.B. dass ein String nicht aufrufbar ist. Das Exception-Handling ist hier sowieso unsinnig, weil ein SELECT der kein Ergebnis liefert, kein Fehler ist, sondern einfach nur kein Ergebnis liefert, wenn man es denn abfragen würde. Ein `commit` bei einem SELECT ist auch unsinnig. `assert` ist ein Keyword und keine Funktion, daher sind die Klammern überflüssig. Laß auch gleich die assets alle weg. Wenn man in Python einen nicht verwendbaren Datentyp hat, dann wird an entsprechender Stelle ein Fehler geworfen. Auf der anderen Seite muß nicht alles exakt den Datentyp haben, den Du hier abfragst.
Was ist der Unterschied zwischen `username` und `User`?
Was ist der Unterschied zwischen `username` und `User`?
Habe ich dir doch schon geschrieben. Wenn du keine Ergebnisse bekommst, dann hat die Datenbank deinen Benutzer nicht bekommen. Dazu hat ein cursor das Attribut "rowcount"
Code: Alles auswählen
cursor.execute(...)
if cursor.rowcount:
# hast einen user
else:
# hast keinen
@__deets__: `rowcount` funktioniert nur mit UPDATE/INSERT und gibt die Anzahl der geänderten Einträge an. Bei SELECT funktioniert das nicht, weil die DB im Normalfall erst die Ergebnisse liefert, wenn man sie auch abfragt.
@MupfSpace: man fragt die Datenbank ab, und wenn kein Ergebnis kommt, existiert der User nicht.
@MupfSpace: man fragt die Datenbank ab, und wenn kein Ergebnis kommt, existiert der User nicht.
@__deets__
Danke
Hat soweit gut funktioniert wenn der user vorhanden ist macht er das was ich wollte.
Bloß wenn der user nicht vorhanden ist macht er gar nichts anstelle von dem was bei else steht
Danke
Hat soweit gut funktioniert wenn der user vorhanden ist macht er das was ich wollte.
Bloß wenn der user nicht vorhanden ist macht er gar nichts anstelle von dem was bei else steht
Zuletzt geändert von MupfSpace am Mittwoch 4. April 2018, 12:17, insgesamt 1-mal geändert.