繁体   English   中英

如何检查 sqlite 3 python 的列中是否存在值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM