mysql 元组索引必须是整数或切片,而不是字符串

dwbf0jvd  于 2023-03-11  发布在  Mysql
关注(0)|答案(4)|浏览(151)

我在使用mySQL时遇到这个问题。我的结果= [{'email': 'bernie@shrimp.com'}],但在执行email = results[0]['email']时得到TypeError: tuple indices must be integers or slices, not str
问题是当我在本地运行它的时候,它运行的很好,我怎么得到bernie@shrimp.com
users是一个表
代码:

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'}]
ybzsozfc

ybzsozfc1#

fetchall的结果是元组列表,而不是dict列表。
您的查询结果只有一个字段:电子邮件在索引0。
您可以像这样重写代码:

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

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

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

我想,还可以用途:

row = cursor.one()
hi3rlvi2

hi3rlvi22#

这可以与其他内容一起使用。

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

nuypyhwy3#

fetchall返回元组列表。您需要通过列的序号而不是名称来访问它:

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

vxf3dgd44#

cursor()方法调用中的dictionary=True参数允许使用字典来表示行,而不是元组。

cursor = connection.cursor(dictionary=True)
cursor.execute('SELECT email FROM users WHERE username = %s LIMIT 1', (attempted_username,))
email_dict = cursor.fetchone()
print(email_dict)
session['email'] = email_dict['email']

相关问题