Как проверить, существует ли значение в столбце в sqlite 3 python - PullRequest
1 голос
/ 25 апреля 2020

У меня есть таблица (предпочтение server_), в которой есть следующие заголовки: guild_id - int mod_channel_role_id - int report_channel_id - int Я хочу проверить, существует ли 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 ": синтаксическая ошибка

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Если вы не хотите, чтобы дубликаты 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;
0 голосов
/ 25 апреля 2020

Вы можете реализовать эту логику c в операторе sngle, используя синтаксис insert ... select с условием not exists:

insert into server_preference(guild_id)
select :guild_id
where not exists (select 1 from server_preference where guild_id = :guild_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...