首页 > 解决方案 > 如何检查来自变量输入的 SQL 查询是否在 Python 中返回一行?

问题描述

我正在尝试创建一个函数来检查用户名是否已被使用。

signup_username = input("Username: ")

check_username = cursor.execute(f"""SELECT username
                                    FROM user
                                    WHERE username = '{signup_username}'""")

while check_username.rowcount != 0:

    print("Username already taken.")
    signup_username = input("Username: ")

出于某种原因,即使用户表中只有一行,但无论我在 signup_username 输入中输入什么内容,它都会卡在 while 循环中,就好像用户名已经被占用了一样。

我的数据库已连接。其他一切都有效,但由于某种原因,这不起作用。知道如何解决吗?

标签: pythonsqlsqlite

解决方案


您的代码中有两个问题,第一个是您没有更改循环内的查询,因此仍然使用原始用户名获取数据。

第二个是.rowcount总是返回-1查询SELECT。如果您尝试打印变量

>>> cursor.execute("select * from user").rowcount
-1

文档中:

根据 Python DB API 规范的要求,rowcount 属性“如果没有在游标上执行 executeXX() 或最后一个操作的行数无法由接口确定,则为 -1”。

这包括SELECT语句,因为在获取所有行之前,我们无法确定查询产生的行数。

这意味着所有 SELECT语句都没有rowcount.


你想要做的是运行.fetchone()并检查它是否不为空。如果是这样,这意味着您已经在 db 中拥有该用户名


推荐阅读