Error bei sqlite3

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
Benutzeravatar
MaximalMax
User
Beiträge: 18
Registriert: Sonntag 3. Mai 2020, 00:51

Ich mache gerade ein Login-System, das wird dann in ein GUI-Programm "reingecodet". Wie kann ich meinen Error (unten) fixen?

Das Login-Formular:

Code: Alles auswählen

import sqlite3
import hashlib

if __name__ == "__main__":
    conn = sqlite3.connect('database.db')
    curs = conn.cursor()

    username = input('Username: ')
    password = input('Password: ')

    sql = (f"SELECT * FROM logindata WHERE username='{username}'")
    pw = curs.execute(sql)
    conn.commit()

    userpassword_hash = hashlib.sha512(password.encode()).hexdigest()

    if password == pw:
        print('Sucess: Sucessfully loged in')
    else:
        print('Error: Failed to log in')

    conn.close()
Registerierungs-Formular:

Code: Alles auswählen

import sqlite3
import hashlib

if __name__ == "__main__":
    conn = sqlite3.connect('database.db')
    curs = conn.cursor()

    sql = """CREATE TABLE IF NOT EXISTS logindata (username text NOT NULL, password text NOT 
    NULL)"""

    curs.execute(sql)
    conn.commit()

    username = input('Username: ')
    password = input('Password: ')

    password = password.encode()
    password = hashlib.sha512(password).hexdigest()

    print(password)

    sql = "INSERT INTO logindata (username, password) VALUES ('{0}', '{1}')".format(username, password)

    curs.execute(sql)
    conn.commit()
    conn.close()
Ich habe hier den folgenden Error bekommen:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/maxpr/Login System/venv/login.py", line 12, in <module>
    pw = curs.execute(sql)
sqlite3.OperationalError: no such table: logindata
Ich freue mich schon auf eure Hilfe :D
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Man formatiert keine Werte in SQL-Statements sondern benutzt Platzhalter. Das steht ganz oben in der Dokumentation.
userpassword_hash wird nicht benutzt. Das ist auch keine gute Methode, um Passwörter sicher zu speichern. Benutz was etabliertes.
pw ist ein Cursor und kann niemals gleich einem String sein. Benutze keine Abkürzungen oder kryptische Buchstaben.

Laut Fehlermeldung gibt es keine Tabelle logindata. Die muß wohl vor dem Benutzen erstellt werden.
Antworten