Seite 1 von 1
Python mit SQL | Klammern&Komma aus Variable löschen
Verfasst: Samstag 28. Mai 2022, 21:17
von DerKian
Moin Moin zusammen,
ich habe in einer Datenbank Username und Password für ein Login Fenster gespeichert, wenn ich allerdings per Select die beiden Daten aus der Datenbank raussuche und unter einer variable speichere, habe ich die ganzen Klammern und Kommas dabei. Gibt es eine Möglichkeit diese zu löschen ?
Viele Grüße
Kian
Code: Alles auswählen
dbcon = sqlite3.connect("vg.db")
cursor = dbcon.cursor()
cursor.execute("SELECT username FROM Logindaten")
username = cursor.fetchall()
print(username)
cursor.execute("SELECT pass FROM Logindaten")
passw = cursor.fetchall()
print(passw)
print(username)
Output:
https://prnt.sc/BUSPyRyBcVWe
Re: Python mit SQL | Klammern&Komma aus Variable löschen
Verfasst: Samstag 28. Mai 2022, 21:27
von __deets__
Indem du die Ergebnisse nicht stumpf in einen String wandelst. Sondern einzeln auf Zeilen und Spalten zugreifst.
Re: Python mit SQL | Klammern&Komma aus Variable löschen
Verfasst: Samstag 28. Mai 2022, 21:33
von DerKian
Könntest du mir vielleicht mit einem Code Beispiel weiterhelfen? So sagt mir das nichts
Re: Python mit SQL | Klammern&Komma aus Variable löschen
Verfasst: Samstag 28. Mai 2022, 21:41
von __blackjack__
@DerKian: Da gibt es keine Klammern und Kommas, denn das ist keine Zeichenkette die Du da bekommst, sondern eine Datenstruktur aus Listen und Tupeln. Da musst Du halt entsprechend mit umgehen.
Wobei das auch ein bisschen komisch aussieht was Du da machst, denn `username` und `passw` sind als Namen falsch/irreführend, denn Du fragst *alle* Benutzernamen und *alle* Passwörter ab. Und das getrennt, ohne irgendwie zu sortieren. Da scheint nur ein Eintrag in der Tabelle zu sein, aber sowie da mehr drin sind, ist nicht garantiert, das die Einträge in den Listen auch tatsächlich zusammen gehören, weil die Datenbank die in beliebiger Reihenfolge liefern darf. Auch falls sie das (scheinbar) nicht tun sollte, darf man sich da nicht drauf verlassen.
Namen sollte man nicht kryptisch abkürzen. Weder im Programm noch in SQL in Tabellen oder Spaltennamen. Also `password` statt `pass` als Spaltenname und `passw` im Programm müsste `passwords` heissen. `dbcon` wäre `db_connection`.
Sowohl den Cursor als auch die Verbindung sollte man nach Gebrauch schliessen. `contextlib.closing()` und die ``with``-Anweisung, oder alternativ ``try``/``finally`` sichern das ab.
Code: Alles auswählen
#!/usr/bin/env python3
import sqlite3
from contextlib import closing
def main():
with closing(sqlite3.connect("vg.db")) as db_connection:
with closing(db_connection.cursor()) as cursor:
cursor.execute("SELECT username, password FROM login_data")
login_data = cursor.fetchall()
print(login_data)
if __name__ == "__main__":
main()
Textausgaben bitte nicht als Bild hier einfügen oder woanders hochladen, sondern als Text in den Beitrag kopieren.
Re: Python mit SQL | Klammern&Komma aus Variable löschen
Verfasst: Samstag 28. Mai 2022, 21:57
von DerKian
Danke für deine umfangreiche Antwort. Ich habe deine Tipps umgesetzt aber habe immer noch mein altes Problem.
Der Benutzername und das Password wird als [('Aven')] und [('Punkte')] ausgegeben, allerdings werden die beiden Variablen als Vergleich für Passwort und Benutzername in einem Login Fenster benutzt, weshalb sie wirklich nur unter Aven und Punkte gespeichert werden dürfen.
Code bei der Password und Benutzername abfrage folgt:
Code: Alles auswählen
def login():
if user.get()==(username) and user3.get()==(password):
main()
w_login.destroy()
else:
wrongpass()
Bitte nicht über die Wahl von user und user3 beschweren (wird noch geändert) also wie bekomme ich nun aus [('Aven')] nur noch Aven?
Re: Python mit SQL | Klammern&Komma aus Variable löschen
Verfasst: Samstag 28. Mai 2022, 22:27
von Sirius3
Wenn Du __blackjack__s Code benutzt, bekommst Du eine Liste von Tupeln aus username und password.
Wie sieht Dein Code also jetzt komplett aus?
Listen und Tuple gehören zu den absoluten Grundlagen. Wer die noch nicht beherrscht, sollte noch nicht versuchen GUIs zu programmieren.
Alles was Funktionen brauchen, müssen sie über ihre Argumente bekommen. Benutze keine globalen Variablen.
Und man speichert niemals Passwörter im Klartext sondern nur in gehashter Form.
Re: Python mit SQL | Klammern&Komma aus Variable löschen
Verfasst: Sonntag 29. Mai 2022, 10:17
von __blackjack__
@DerKian: Die Abfrage passt doch auch gar nicht wirklich zu dem Vorgehen was man bei einer Anmeldung benötigt. Da braucht man von der Datenbank doch nicht *alle* Benutzernamen und *alle* Passwörter, beziehungsweise deren Hashes, sondern nur den Hash zu dem eingegebenen Benutzernamen. Man muss also mindestens mal den eingegebenen Benutzernamen mit in der Abfrage in einer Bedingung beim SQL haben, um gezielt den dazugehörigen Hash-Wert abzufragen. Aber wenn man diese Bedingung stellt, kann man auch gleich Benutzernamen *und* Hash in die Abfragebedingung beim SQL schreiben, und die Datenbank den kompletten Test machen lassen, und einfach nur Testen ob dabei ein Ergebnis kommt oder nicht.