我想检查实体是否已经存在于一个表中,我试图搜索谷歌从这个,我发现了这个,但它没有帮助我。我想 return False
如果实体已经存在,但它总是插入用户。
def insert_admin(admin_name) -> Union[bool, None]:
cursor.execute(f"SELECT name FROM admin WHERE name='{admin_name}'")
print(cursor.fetchall()) # always return empty list []
if cursor.fetchone():
return False
cursor.execute(f"INSERT INTO admin VALUES('{admin_name}')") # insert the name
def current_admins() -> list:
print(cursor.execute('SELECT * FROM admin').fetchall()) # [('myname',)]
当我再次运行程序时,我仍然可以看到 print(cursor.fetchall())
返回空 list
. 如果我已经在表中插入了一个名称,为什么会发生这种情况?如何检查该名称是否已经存在?
1条答案
按热度按时间cyvaqqii1#
如果希望避免表中出现重复的名称,那么就让数据库来完成这项工作——定义
unique
约束或索引:您可以多次尝试插入相同的名称。但它只工作一次,在随后的尝试中返回一个错误。
请注意,这也比在应用程序级别尝试这样做要好得多。特别是,不同的线程仍然可以(大致)同时插入相同的名称——因为它们运行第一个查询,看到名称不在那里,然后插入相同的行。
当数据库验证数据完整性时,您不必担心这种竞争条件。