如何将 '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 子句要求 all 以 a
:
开头的名称
... WHERE name LIKE 'a%'
那么收集一个列表的名字比较合适:
import pprint
...
names = [name
for name, in myresult]
pprint.pprint(names)
您从myresult = mycursor.fetchall()
获得的myresult
是一个元组列表。
对于 for x in myresult:
,x
从 myresult
中一个接一个地分配每个元组。然后使用 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])
基本上,当我的 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 子句要求 all 以 a
:
... WHERE name LIKE 'a%'
那么收集一个列表的名字比较合适:
import pprint
...
names = [name
for name, in myresult]
pprint.pprint(names)
您从myresult = mycursor.fetchall()
获得的myresult
是一个元组列表。
对于 for x in myresult:
,x
从 myresult
中一个接一个地分配每个元组。然后使用 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])