Python 检查表中是否已存在实体
我想检查一个表中是否已经存在实体,我试着从中搜索google,结果找到了,但这对我没有帮助。 如果实体已经存在,但总是插入用户,我想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
返回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.updatecursor.execute(f“INSERT INTO admin(name)VALUES(“{admin_name}”))如果未配置自动提交,则需要调用“
和提交”。@AshishKarn现在可以编辑当前的名称,而不是添加新名称。如何添加新的名称
,而不是替换当前的名称
?现在我可以看到,我只能在表中保留一个名称
。您能用大写字母代替小写字母吗?什么是unq\u admin\u name
?我是否需要用我的管理员姓名替换unq\u admin\u name
和name
。我完全不理解你的评论。这将在数据库中创建一个约束。创建后,name
在admin
中保证是唯一的。但是我希望能够向表中添加许多管理员。不止一个。@dsasd。嗯?当然,您可以添加任意数量的管理员。他们只是不能有相同的名字。