添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

如何在sqlite 3 python中检查一个列中是否存在一个值?

0 人关注

我有一个表(server_ preference),它有这些标题。 guild_id - int mod_channel_role_id - int report_channel_id - int 我想检查guild_id是否存在于guild 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: near "IF": syntax error

1 个评论
SQLite风味的sql语法记录于 sqlite.org/lang.html ...你在哪里都找不到以IF开头的命令。你不能随便扔东西给它,希望它能起作用。
python
sql
python-3.x
sqlite
sql-insert
yotam rec
yotam rec
发布于 2020-04-25
2 个回答
Gordon Linoff
Gordon Linoff
发布于 2020-04-25
已采纳
0 人赞同

如果你不希望你的表中有重复的 guild_id ,那么你应该让数据库用唯一约束或索引来强制执行唯一性(它们几乎是等同的)。

所以,先说说。

CREATE UNIQUE INDEX unq_server_preference_guild_id ON server_preference(guild_id);

Then, if you run:

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;
    
GMB
GMB
发布于 2020-04-25
0 人赞同

你可以通过使用 insert ... select 语法和 not exists 条件在sngle语句中实现这一逻辑。