Search code examples
pythonmysqlpythonanywhere

tuple indices must be integers or slices, not str


I'm running into this issue when using mySQL. My result = [{'email': 'bernie@shrimp.com'}] but I'm getting an TypeError: tuple indices must be integers or slices, not str when I'm doing email = results[0]['email']

The thing is when I'm running this locally it works perfectly. How do I get bernie@shrimp.com?

users is a table

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': 'bernie@shrimp.com'}]

Solution

  • The result of fetchall is a list of tuples, not a list of dict.

    Your query result have only one field: email at index 0.

    You can rewrite your code like this:

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

    Or, in your situation where there is only one result:

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

    I think, you can also use:

    row = cursor.one()