SQLite:Return 如果在 table 中发现重复值则为真
SQLite : Return true if duplicate values are found in table
我想知道如何在 table 中找到重复值并使其 return 为真。我已经看到很多关于此的问题,但其中 none 帮助了我,谢谢!
这是我的例子:
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()
免责声明
对于那些想知道的人,不,这不会在生产环境中使用,它不安全并且很容易被利用。甚至没有在哈希上加盐。
假设你有这个 table:
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;
如果您的目标是防止插入新的用户记录,其中的用户名或电子邮件已被其他人使用,那么现有查询提供了一个选项:
INSERT INTO accounts (username, password, email)
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM accounts WHERE username = ? OR email = ?);
也就是说,在一条语句中,我们还可以检查提供的用户名或电子邮件是否已经出现在 accounts
table.
中的某处
已更新 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))
所以这段代码有效
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.")
我想知道如何在 table 中找到重复值并使其 return 为真。我已经看到很多关于此的问题,但其中 none 帮助了我,谢谢!
这是我的例子:
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()
免责声明
对于那些想知道的人,不,这不会在生产环境中使用,它不安全并且很容易被利用。甚至没有在哈希上加盐。
假设你有这个 table:
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;
如果您的目标是防止插入新的用户记录,其中的用户名或电子邮件已被其他人使用,那么现有查询提供了一个选项:
INSERT INTO accounts (username, password, email)
SELECT ?, ?, ?
WHERE NOT EXISTS (SELECT 1 FROM accounts WHERE username = ? OR email = ?);
也就是说,在一条语句中,我们还可以检查提供的用户名或电子邮件是否已经出现在 accounts
table.
已更新 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))
所以这段代码有效
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.")