元组索引必须是整数或切片,而不是str

时间:2017-10-01 07:28:36

标签: python mysql pythonanywhere

使用mySQL时遇到了这个问题。我的结果= [{'email': 'bernie@shrimp.com'}],但我正在TypeError: tuple indices must be integers or slices, not str时收到email = results[0]['email']

事情就是当我在本地运行它时它完美无缺。我如何获得bernie@shrimp.com

用户是一张表

代码:

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

控制台:

[{'email': 'bernie@shrimp.com'}]

3 个答案:

答案 0 :(得分:0)

fetchall的结果是元组列表,而不是dict的列表。

您的查询结果只有一个字段:索引为0的电子邮件。

您可以像这样重写代码:

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

或者,在只有一个结果的情况下:

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

我想,您也可以使用:

row = cursor.one()

答案 1 :(得分:0)

fetchall返回一个tupples列表。您需要通过列的序号访问它,而不是它的名称:

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

答案 2 :(得分:0)

这可以使用extras.DictCursor:

cur = conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
for fields in cur:
   print(fields['column_name'])