[英]how to check if a value exists in a column in sqlite 3 python
我有一个表(server_preference),其中包含以下标题: guild_id - int mod_channel_role_id - int report_channel_id - int 我想检查 guild_id 是否存在于公会 id 列中,如果它不存在我想插入到表中的新员工我试过很多东西,还没有找到任何有用的东西这是我最后一次尝试
conn = sqlite3.connect("server_preference.db")
c = conn.cursor()
for guild in client.guilds:
c.execute("""IF NOT EXISTS ( SELECT guild_id FROM server_preference WHERE guild_id = ?)
BEGIN
INSERT INTO server_preference (guild_id) VALUES (:guild_id)
END""", guild.id)
conn.commit()
conn.close()
我得到了这个错误:
sqlite3.OperationalError:靠近“IF”:语法错误
您可以通过使用insert... select
语法在not exists
条件下在 sngle 语句中实现此逻辑:
insert into server_preference(guild_id)
select :guild_id
where not exists (select 1 from server_preference where guild_id = :guild_id)
如果您不想在表中出现重复的guild_id
,那么您应该让数据库使用唯一约束或索引来强制唯一性(它们几乎是等价的)。
所以,从:
CREATE UNIQUE INDEX unq_server_preference_guild_id ON server_preference(guild_id);
然后,如果你运行:
INSERT INTO server_preference (guild_id) VALUES (:guild_id);
你会得到一个错误。 如果要避免错误,请使用ON CONFLICT
子句:
INSERT INTO server_preference (guild_id)
VALUES (:guild_id)
ON CONFLICT (guild_id) DO NOTHING;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.