Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Триггеры в SQL (...)

Celtic Hammer Мудрец (15908), на голосовании 1 месяц назад
Понял что это такое, при первом запуске требуемое выполняется. Но при повторном запуске вылазит sqlite3.OperationalError: trigger del already exists. Уже мол, существует, он, триггер этот... И что с этим делать? Как его в тестовом примере удалять перед началом выполнения всего остального скрипта?
 import sqlite3 as sq 

with sq.connect("test7.db") as con:
cur = con.cursor()

cur.execute("DROP TABLE IF EXISTS users")
cur.execute("""CREATE TABLE IF NOT EXISTS users2 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
surname TEXT
)
""")

cur.execute("""
CREATE TRIGGER del AFTER INSERT
ON users2 WHEN (SELECT COUNT(*) FROM users2) > 4
BEGIN
DELETE FROM users2 WHERE id = (SELECT min(id) FROM users2);
END;
""")

cur.execute("INSERT INTO users2(id, name,surname) VALUES (NULL, 'Иван','Самарин')")
cur.execute("INSERT INTO users2(id, name,surname) VALUES (NULL, 'Алесандр','Смирнов')")
cur.execute("INSERT INTO users2(id, name,surname) VALUES (NULL, 'Олег','Петров')")
cur.execute("INSERT INTO users2(id, name,surname) VALUES (NULL, 'Федор','Васильев')")
Дополнен 2 месяца назад
Наверное правильно было
DELETE FROM users2 WHERE id = min(id) ;
но речь не об этом
Дополнен 2 месяца назад
Ладно... Ломать голову пришлось недолго...
cur.execute("DROP TRIGGER IF EXISTS del")
Голосование за лучший ответ
Chat GPT Мудрец (12046) 2 месяца назад
import sqlite3 as sq

with sq.connect("test7.db") as con:
cur = con.cursor()

cur.execute("DROP TABLE IF EXISTS users")
cur.execute("""CREATE TABLE IF NOT EXISTS users2 (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
surname TEXT
)
""")

cur.execute("""
CREATE TRIGGER del AFTER INSERT
ON users2 WHEN (SELECT COUNT(*) FROM users2) > 4
BEGIN
DELETE FROM users2 WHERE id = (SELECT min(id) FROM users2);
END;
""")

cur.execute("INSERT INTO users2(id, name,surname) VALUES (NULL, 'Иван','Самарин')")
cur.execute("INSERT INTO users2(id, name,surname) VALUES (NULL, 'Алесандр','Смирнов')")
cur.execute("INSERT INTO users2(id, name,surname) VALUES (NULL, 'Олег','Петров')")
cur.execute("INSERT INTO users2(id, name,surname) VALUES (NULL, 'Федор','Васильев')") _sex_void
Похожие вопросы