我想知道如何在表中查找重復值并使其回傳 True。我已經看到很多關于此的問題,但沒有一個有幫助,謝謝!
這是我的例子:
import hashlib
import sqlite3
con = sqlite3.connect('users/accounts.db')
cur = con.cursor()
info = cur.execute("SELECT * FROM accounts;").fetchall()
print("Sign Up.")
username = input("Input your username : ")
password = input("Input your password : ")
email = input("Input your email: ")
result = hashlib.sha256(password.encode("utf-8"))
result_2 = str(result.digest)
cur.execute("insert into accounts (username, password, email) values(?,?,?)", (username, result_2, email))
con.commit()
print(info)
con.close()
免責宣告
對于那些想知道的人,不,這不會在生產環境中使用,它不安全并且很容易被利用。甚至沒有給哈希加鹽。
uj5u.com熱心網友回復:
如果您的目標是防止使用其他人已使用的用戶名或電子郵件插入新用戶記錄,則存在查詢提供了一個選項:
INSERT INTO accounts (username, password, email)
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM accounts WHERE username = ? OR email = ?);
也就是說,在單個陳述句中,我們還可以檢查提供的用戶名或電子郵件是否已經出現在accounts表中的某處。
更新的 Python 代碼:
sql = """
INSERT INTO accounts (username, password, email)
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM accounts WHERE username = ? OR email = ?)
"""
cur.execute(sql, (username, result_2, email, username, email))
uj5u.com熱心網友回復:
假設你有這張表:
create table foo (
foo_id numeric(12,0) primary key,
str_value varchar(200)
);
并且您想為 查找重復值str_value。
你可以這樣做:
select str_value
from foo
group by str_value
having count(1) > 1;
您將獲得一份str_values帶有重復項的串列。
如果您想知道每個重復項有多少,str_value您可以添加count(1)到您的 select 子句中:
select str_value, count(1)
from foo
group by str_value
having count(1) > 1;
uj5u.com熱心網友回復:
所以這段代碼有效
b = cur.execute("select * from accounts").fetchall()
sql = """INSERT INTO accounts (username, password, email)
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM accounts WHERE username = ? OR email = ?)"""
cur.execute(sql, (username, str(result.digest()), email, username, email))
a = cur.execute("select * from accounts").fetchall()
if a > b:
print("Registration Complete.")
else:
print("Failed : Username or Email already exists.")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/394259.html
