[英]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.