2017-10-08 1 views
0

Ich mache ein Login-System in Python mit SQLite3. Mein Code wählt alle Datensätze aus, bei denen der Benutzername und das Kennwort, die in der Datenbank gespeichert sind, wie folgt erfüllt sind.SQLite3 Datensatzmanipulation

c.execute('SELECT * from foo WHERE username="%s" AND password="%s"' (username, password). 
if c.fetchone is not None: 
    do stuff 

Ich bin nicht bewusst, wie aus dem Datensatz in eine lokale Variable in einer Funktion, die Daten dann zuordnen, so kann ich überprüfen, es Wert ist. In diesem Fall möchte ich den Benutzergruppenwert aus dem Datensatz, den ich gerade gesucht habe, abrufen und dann prüfen, ob es 1 oder 2 ist, um zu bestimmen, welche Funktion als nächstes aufgerufen werden soll.

+0

'fetchone' ist ein Verfahren; Du rufst es an und es gibt die Daten zurück. –

+0

Wie verwende ich 'fetchone' auf diese Weise? –

+0

Genau wie jede andere Methode. 'data = c.fetchone()'. –

Antwort

0

die fetchone Methode aufzurufen, müssen Sie Klammern verwenden:

if c.fetchone() is not None: 

Und wenn Sie nicht fetchone() ‚s Rückgabewert einer Variablen zuweisen, ist es verloren.

Es wäre eine bessere Idee, direkt über dem Cursor iterieren:

for row in c: 
    print('value in first column: ', row[0]) 
    break 
else: 
    print('not found') 

Und Sie sollten nur eine einzige Spalte auswählen, die seinen Wert macht den Zugriff einfacher:

c.execute('SELECT usergroup FROM ...') 
for (usergroup,) in c: 
    print('group: ', usergroup) 

Und wenn jemand gibt das Passwort " OR "1"="1 ein, dann kommt er trotzdem rein. Um dies zu verhindern SQL injections, immer verwenden Parameter:

c.execute('SELECT usergroup FROM foo WHERE username=? AND password=?', 
      (username, password)) 
for (usergroup,) in c: 
    print('group: ', usergroup) 
    break 
else: 
    print('not found')