python - 如何检查来自变量输入的 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 循环中,就好像用户名已经被占用了一样。
我的数据库已连接。其他一切都有效,但由于某种原因,这不起作用。知道如何解决吗?
解决方案
您的代码中有两个问题,第一个是您没有更改循环内的查询,因此仍然使用原始用户名获取数据。
第二个是.rowcount
总是返回-1
查询SELECT
。如果您尝试打印变量
>>> cursor.execute("select * from user").rowcount
-1
从文档中:
根据 Python DB API 规范的要求,rowcount 属性“如果没有在游标上执行 executeXX() 或最后一个操作的行数无法由接口确定,则为 -1”。
这包括
SELECT
语句,因为在获取所有行之前,我们无法确定查询产生的行数。
这意味着所有 SELECT
语句都没有rowcount
.
你想要做的是运行.fetchone()
并检查它是否不为空。如果是这样,这意味着您已经在 db 中拥有该用户名
推荐阅读
- html - HTML 文档中的多个 SVG 标记,IMG 标记引用它们 - 如何?
- javascript - 以字符串形式获取对象中的 Base64
- python - 将带有重置的 R cumsum 转换为 Python
- maxima - 有理表达式的简化
- spring - 如何在 Spring 应用程序中启动协程
- java - 如何在返回语句之前从 FirebaseFirestore 获取所有数据
- c# - ScrollViewer 在最顶部和最底部位置有一条线
- c++ - 基于参数类型的模板化返回类型
- excel - 如何使用 sumif 函数在 VBA 代码中使用变量
- javascript - 如何使用事件侦听器向对象数组添加新元素并将其显示在 html 页面上