@Usenovich

Удаление данных из БД через определенное время?

У меня есть телеграмм бот, который после успешной покупки (подписка на месяц) записывает данные о клиенте в БД, и мне надо через месяц удалить его данные из БД что бы закрыть ему доступ. И надо уведомить клиента что его подписка подходит к концу за 5 дней и за день до истечения срока, но это не так важен как первый вопрос. Попробовал cur.execute("DELETE FROM datas WHERE user_id < datetime('now','-1 day')") не вышло(может быть я не правильно написал)

Вот весь код
import sqlite3
 
conn = sqlite3.connect('client_base.db', check_same_thread=False) 
cur = conn.cursor()

cur.execute("""CREATE TABLE IF NOT EXISTS datas( 
user_id INTEGER,
username TEXT,
user_name TEXT,
user_surname TEXT    
);""")
cur.execute("DELETE FROM datas WHERE user_id < datetime('now','-1 day')")
conn.commit()

conn.close()


Данные в БД записываются в другом файле если и они нужны скину в ответе))
  • Вопрос задан
  • 309 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Этот вопрос тут задаётся ежемесячно. Не надо ничего удалять, нужно добавить поле, хранящее дату подписки, и потом при выборках проверять, что с даты в этом поле прошло больше месяца. Или добавлять в это поле дату окончания подписки и проверять, что текущая дата больше.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
У Вас неправильный запрос SQL!
Вы сравниваете user_id датой!
Нужно как-то так
cur.execute("DELETE FROM datas WHERE user_id = ? AND registered < datetime('now','-1 day')", (user_id))

Но нужно добавить колонку registered с датой регистрации.
А вообще-то удалять ничего не надо, просто не пускайте пользователей с датой старше месяца.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы