检查实体是否已经存在于表中

8gsdolmq  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(297)

我想检查实体是否已经存在于一个表中,我试图搜索谷歌从这个,我发现了这个,但它没有帮助我。我想 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 . 如果我已经在表中插入了一个名称,为什么会发生这种情况?如何检查该名称是否已经存在?

cyvaqqii

cyvaqqii1#

如果希望避免表中出现重复的名称,那么就让数据库来完成这项工作——定义 unique 约束或索引:

ALTER TABLE admin ADD CONSTRAINT unq_admin_name UNIQUE (name);

您可以多次尝试插入相同的名称。但它只工作一次,在随后的尝试中返回一个错误。
请注意,这也比在应用程序级别尝试这样做要好得多。特别是,不同的线程仍然可以(大致)同时插入相同的名称——因为它们运行第一个查询,看到名称不在那里,然后插入相同的行。
当数据库验证数据完整性时,您不必担心这种竞争条件。

相关问题