[英]Checking if a username exists within a sqlite database
非常笼统的问题,但其他解决方案似乎都不适合我。
这就是我所拥有的,目前它总是返回用户名不存在的信息。 我希望代码遍历所有数据并检查是否可以在表中找到输入 (x)。 谢谢。
x = 来自用户的输入 c = conn.cursor()
def read_from_db():
c.execute("SELECT user FROM stuffToPlot ")
if x in c.fetchall():
print('Username already exists')
if x not in c.fetchall():
print("Username doesn't exist")
这似乎是非常标准的 SQL:只需使用用户名参数化您的查询,
c.execute("SELECT 1 FROM stuffToPlot where user = %s", [x])
这将为每个匹配x
用户返回一行。 这可能是 0 或 1 行(如果您可以有多个stuffToPlot
与同一个user
您总是可以向查询添加limit 1
)。 然后,您可以检查cr.rowcount
以查看是否有结果,甚至无需费心去获取它们:您只想看看是否有匹配项:
if c.rowcount:
print('Username already exists')
else:
print("Username doesn't exist")
或者,您可以使用EXISTS
并获取一行,告诉您是否有任何匹配的行,这就是运算符的用途,它可能会更有效:
c.execute('select exists(select 1 from stuffToPlot where user = %s)', [x])
[exists] = cr.fetchone() # fetch and unpack the only row our query returns
if exists:
print('Username already exists')
else:
print("Username doesn't exist")
不过,你的 Python 有很多问题。
fetchall
总是一个元组列表(即使你得到一个值),这意味着你永远不会在那里找到一个字符串fetchall
获取所有行,这意味着第二个fetchall
将始终返回一个空列表(没有什么可获取的)if a: ... else: ...
比if a: ... if not a: ...
好得多我不知道它是否对所有库都有效,但似乎 sqllite 的 fetchall() 方法返回一个元组元组。
fetchall() 方法获取所有记录。 它返回一个结果集。 从技术上讲,它是一个元组元组。 每个内部元组代表表中的一行。
所以你可以试试:
for query_result in c.fetchall() :
if x in query_result:
print('Username already exists')
else:
print("Username doesn't exist" )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.