Python 检查表中是否已存在实体

Python 检查表中是否已存在实体,python,sql,sqlite,Python,Sql,Sqlite,我想检查一个表中是否已经存在实体,我试着从中搜索google,结果找到了,但这对我没有帮助。 如果实体已经存在,但总是插入用户,我想返回False def insert_admin(admin_name) -> Union[bool, None]: cursor.execute(f"SELECT name FROM admin WHERE name='{admin_name}'") print(cursor.fetchall()) # always re

我想检查一个表中是否已经存在实体,我试着从中搜索google,结果找到了,但这对我没有帮助。 如果实体已经存在,但总是插入用户,我想
返回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',)]

当我再次运行程序时,仍然可以看到
打印(cursor.fetchall())
返回空
列表
。如果我已经在表中插入了一个名称,为什么会发生这种情况?如何检查该名称是否已经存在?

如果要避免表中的名称重复,请让数据库执行此工作--定义一个
唯一的
约束或索引:

ALTER TABLE admin ADD CONSTRAINT unq_admin_name UNIQUE (name);
您可以多次尝试插入相同的名称。但它只会工作一次,在随后的尝试中返回一个错误

请注意,这也比在应用程序级别尝试这样做要好得多。特别是,不同的线程仍然可以(大致)同时插入相同的名称——因为它们运行第一个查询,看到名称不存在,然后插入相同的行


当数据库验证数据完整性时,您不必担心这种竞争条件。

用您正在使用的数据库标记您的问题。@GordonLinoff I updated.update
cursor.execute(f“INSERT INTO admin(name)VALUES(“{admin_name}”))如果未配置自动提交,则需要调用“
和提交”。@AshishKarn现在可以编辑当前的
名称,而不是添加新名称。如何添加新的
名称
,而不是替换当前的
名称
?现在我可以看到,我只能在表中保留一个
名称
。您能用大写字母代替小写字母吗?什么是
unq\u admin\u name
?我是否需要用我的管理员姓名替换
unq\u admin\u name
name
。我完全不理解你的评论。这将在数据库中创建一个约束。创建后,
name
admin
中保证是唯一的。但是我希望能够向表中添加许多
管理员。不止一个。@dsasd。嗯?当然,您可以添加任意数量的管理员。他们只是不能有相同的名字。