如何将 'for x in myresult: print(x[0])' 的结果放入变量中

How to get the result of the 'for x in myresult: print(x[0])' into a variable

基本上,当我的 SQL 命令获取数据库的数据时,它会像这样出现 [('admin',)]

我的结果中的 x: 打印(x[0]) 我发现这将以管理员身份打印出来,这就是我想要的方式,但我需要将其保存到变量中,例如 username

定义登录(): mydb = mysql.connector.connect(

host="localhost",
user="root",
passwd="password",
database="testdb",
)


username=input("Please Enter Your username:     ") 

mycursor = mydb.cursor()


mycursor.execute ("SELECT name FROM account_database WHERE name = 'admin' ")

myresult = mycursor.fetchall()
print(myresult)
mydb.commit()
mycursor.close()

for x in myresult:
    print(x[0])

您写道:

for x in myresult:
    print(x[0])

之后,x 仍在范围内, 所以您可以尽情使用涉及 x 的表达方式。

假设您最喜欢的变量是 v。 然后在循环之后你可以分配例如:

v = x[0]

表达循环的更好方法是元组解包:

for name, in myresult:
    print(name)

v = name

在这里,我们将 1 元组解包到字符串变量 name 中。 请求两列的更高级查询可能会使用:for name, age in myresult:

现在,您当前的查询使用相等性测试 所以它将 return 零行或一行 (并且 v 赋值在零行 "not found" 情况下会失败)。 想象一下,而不是只找到 'admin' 您的 WHERE 子句要求 alla:

开头的名称
... WHERE name LIKE 'a%'

那么收集一个列表的名字比较合适:

import pprint
...
names = [name
         for name, in myresult]

pprint.pprint(names)

您从myresult = mycursor.fetchall()获得的myresult是一个元组列表。

对于 for x in myresult:xmyresult 中一个接一个地分配每个元组。然后使用 x[0] 访问这些元组中的第一个元素。

在你的例子中,只有一个元组,只有一个值。这是有道理的,因为您的 SQL 从名称为 'admin' 的所有记录中选择 name - 您基本上是在检查是否有名称为 'admin' 的用户。目前还不清楚为什么要使用这个名称,因为每条记录都是 'admin'

您可以像这样直接访问它:

admin_name = myresult[0][0]

即将 myresult 中第一条记录的第一个值分配给 admin_name,但它要么与 admin_name = 'admin' 相同,要么如果没有名为 [=20] 的用户,则会生成错误消息=] 在数据库中。

检查一下:

if len(myresult) == 0:
    print('There is no user named \'admin\'')
else:
    print('There is a user named \'admin\')

注意:如果您只想查看是否有任何具有该名称的记录,您也不需要 .fetchall(),您可以只使用 .fetchone()。或者你甚至可以 运行 一个完全避免错误的查询:

mycursor.execute ("SELECT COUNT(name) FROM account_database WHERE name = 'admin'")
myresult = mycursor.fetchone()
print(f'There are {myresult[0]} users named \'admin\'')

将值追加到列表中。

final = []
for x in myresult:
    print(x[0])
    final.append(x[0])