您可以尝试使用其他查询作为:
if a: ... if not a: ...
相当普通的问题,但其他解决方案似乎都不适合我。
这就是我所拥有的,目前它总是返回用户名不存在。我希望代码遍历所有数据,并检查是否可以在表中找到输入(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
并获取一行以告诉您是否存在任何匹配的行,这就是运算符的作用,并且可能会更有效:]
EXISTS
尽管您的Python有很多问题。
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")
总是一个元组列表(即使只有一个值),这意味着您永远不会在其中找到字符串fetchall
fetchesfetchall
将始终返回一个空列表(没有要提取的内容)fetchall
比if a: ... else: ...
]好得多>您可以尝试使用其他查询作为:
if a: ... if not a: ...
如果由于找不到记录而引发异常,并且您只想知道用户是否存在,则可以使用count:
def read_from_db():
sql=f"SELECT user FROM stuffToPlot WHERE user LIKE '{x}'"
c.execute(sql)
c.fetchall()
if len(c) >0:
print('Username already exists')
else:
print("Username doesn't exist")
您可以尝试使用其他查询作为:
if a: ... if not a: ...