如何检查sqlite 3 python中的列中是否存在值
我有一个表(服务器首选项),其中包含以下标题: 公会id-int mod_channel_role_id-int 报告\u通道\u id-int 我想检查帮会id列中是否存在帮会id,如果不存在帮会id,我想将其插入到新员工表中 我尝试了很多东西,但没有发现任何有效的东西。这是我最后一次尝试如何检查sqlite 3 python中的列中是否存在值,python,sql,python-3.x,sqlite,sql-insert,Python,Sql,Python 3.x,Sqlite,Sql Insert,我有一个表(服务器首选项),其中包含以下标题: 公会id-int mod_channel_role_id-int 报告\u通道\u id-int 我想检查帮会id列中是否存在帮会id,如果不存在帮会id,我想将其插入到新员工表中 我尝试了很多东西,但没有发现任何有效的东西。这是我最后一次尝试 conn = sqlite3.connect("server_preference.db") c = conn.cursor() for guild in client.guilds:
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.error:接近“IF”:语法错误
您可以通过使用
insert。。。选择带有不存在的语法
条件:
insert into server_preference(guild_id)
select :guild_id
where not exists (select 1 from server_preference where guild_id = :guild_id)
您可以通过使用insert。。。选择带有不存在的语法
条件:
insert into server_preference(guild_id)
select :guild_id
where not exists (select 1 from server_preference where guild_id = :guild_id)
如果不希望表中存在重复的guild\u id
s,那么应该让数据库使用唯一约束或索引强制唯一性(它们几乎是等效的)
因此,首先:
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;
如果不希望表中存在重复的guild\u id
s,那么应该让数据库使用唯一约束或索引强制唯一性(它们几乎是等效的)
因此,首先:
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;
SQLite风格的sql语法记录在。。。在任何地方都找不到以IF开头的命令。你不能随便乱扔东西,希望它能工作。SQLite风格的sql语法在。。。在任何地方都找不到以IF开头的命令。你不能随便乱扔东西,希望它能起作用。