Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查sqlite 3 python中的列中是否存在值_Python_Sql_Python 3.x_Sqlite_Sql Insert - Fatal编程技术网

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

如何检查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:

我有一个表(服务器首选项),其中包含以下标题: 公会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:
        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开头的命令。你不能随便乱扔东西,希望它能起作用。