如何从python中选择MYSQL中的一行并处理它?
Posted
技术标签:
【中文标题】如何从python中选择MYSQL中的一行并处理它?【英文标题】:How to select a single row in MYSQL from python and work on it? 【发布时间】:2021-04-28 14:06:22 【问题描述】:我正在做一个项目,在这个项目中,我必须研究 sql。在代码中,我必须处理单行来匹配一个人的值。
def userid():
os.system('cls')
ii = input("enter your User ID: ")
curs.execute("SELECT ID FROM users") #shows ID row of users table
rows = curs.fetchall() #fetch all data of ID row
if (ii,) in rows: #if value of ii is in the row, condition evaluates
password()
else:
exit()
def password():
ps = getpass.getpass("enter your pin: ")
curs.execute("SELECT pin FROM users") #shows PIN row of users table
row = curs.fetchall() #fetch all data of pin row
if (ps,) in row: #if data in row matches with data in ps, condition evaluates
main()
else:
exit()
这是代码,您可以看到,在第一个函数中,我成功获取了用户 ID,但是当涉及到密码时,我想匹配包含用户输入的 UserId 的行中的密码。但相反,它包含的所有密码都被匹配并且正在发生错误。
最近我发现了一个关键字fetchone()
,但不知道如何使用它,否则它会起作用与否。
请帮助我,我怎样才能使用 python 只处理 sql 中的一行。
【问题讨论】:
【参考方案1】:在数据库返回查询结果之前,您需要使用WHERE 子句过滤查询结果。例如
SELECT ID, PIN FROM users WHERE ID = 42
将只返回 id 为 42 的用户的 id 和 pin,如果没有具有此 id 的行,则不返回任何内容。
使用WHERE
子句,我们可以像这样更改您的代码:
def userid():
os.system('cls')
ii = input("enter your User ID: ")
# I'm guessing ID is an integer value in the database?
id_ = int(ii)
# fetch matching id
curs.execute("SELECT ID FROM users WHERE ID = %s", (id_,))
row = curs.fetchone() #fetch all data of ID row
if row: # if the query returned a row, the id exists
password(id_)
else:
exit()
def password(id_):
ps = getpass.getpass("enter your pin: ")
# Fetch the PIN only for our user's ID
curs.execute("SELECT pin FROM users WHERE ID = %s", (id_,))
row = curs.fetchone() #fetch all data of pin row
# if data in row matches with data in ps, condition evaluates
if (ps,) in row:
main()
else:
exit()
请注意,当检查这样的凭据时,通常会获取 id 和密码并在单个查询中检查它们:
id_ = int(input('What is your id number?'))
password = getpass.getpass('What is your PIN?')
cur.execute("""SELECT id, password FROM users WHERE id = %s AND password = %s""",
(id_, password))
这样更有效,因为只有一个查询被发送到数据库,并且可能更安全,因为如果失败,用户不知道 id 或密码是否错误。
【讨论】:
非常感谢先生,它成功了。非常感谢...以上是关于如何从python中选择MYSQL中的一行并处理它?的主要内容,如果未能解决你的问题,请参考以下文章