2017-10-01 1 views
1

Ich bin auf dieses Problem bei der Verwendung von mySQL. Mein Ergebnis = [{'email': '[email protected]'}], aber ich bekomme eine TypeError: tuple indices must be integers or slices, not str, wenn ich tue email = results[0]['email']Tuple-Indizes müssen Ganzzahlen oder Slices sein, nicht str

Die Sache ist, wenn ich lokal vor Ort funktioniert es perfekt funktioniert. Wie bekomme ich [email protected]?

Benutzer eine Tabelle

Code:

cursor.execute('SELECT email FROM users WHERE username = %s', [attempted_username]) 
email_dict = cursor.fetchall() 
print(email_dict) 
session['email'] = email_dict[0]['email'] 

Console:

[{'email': '[email protected]'}] 
+0

Sie können die Frage mit dem richtigen Code bearbeiten, da Ihre Variablennamen nicht übereinstimmen. wie Mein Ergebnis und Ergebnisse. – Harry

+0

Ich habe oben hinzugefügt - sagen Sie mir, wenn mehr benötigt wird –

+0

das Problem kommt mit oder ohne Sitzungen –

Antwort

0

Das Ergebnis fetchall ist eine Liste von Tupeln, nicht eine Liste von dict.

Ihre Abfrageergebnis haben nur ein Feld: E-Mail an den Index 0.

Sie Ihren Code wie folgt umschreiben kann:

rows = cursor.fetchall() 
for row in rows: 
    email = row[0] 

Oder in Ihrer Situation, wo es nur ein Ergebnis:

session['email'] = rows[0][0] 

ich denke, können Sie auch:

row = cursor.one() 
+0

How do Ich bekomme [email protected] dann? –

+0

wird nicht rudern [0] wird 'email' anstelle von '[email protected]' zurückgeben – Harry

+0

@Harry Nein, 'row' ist ein' Tupel' mit den ** Feldwerten **, kein 'dict'. –

0

fetchall gibt eine Liste von Tüppeln zurück. Sie müssen auf die Ordnungszahl der Spalte zugreifen, nicht auf den Namen:

session['email'] = email_dict[0][0] 
+1

das funktioniert auch - danke! –

Verwandte Themen