Seite 1 von 1

Error bei sqlite3

Verfasst: Donnerstag 1. Oktober 2020, 20:54
von MaximalMax
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

Re: Error bei sqlite3

Verfasst: Donnerstag 1. Oktober 2020, 21:05
von Sirius3
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.