如何从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中的一行并处理它?的主要内容,如果未能解决你的问题,请参考以下文章

如何从视图中触发事件(自定义事件)并在 Ext JS 的控制器中处理它们?

如何使用mysql从图像表中获取总数?

如何在python中选择一行中最小的数字?

如何从当前在控制台中的 python 读取一行?

MySQL-如何根据不同列但同一行中的值选择列? [关闭]

Python函数:使用批处理文件将参数从.txt文件传递给python函数并执行函数