Как удалять данные в бд за последний час/месяц(Python)
def init_db(force: bool = False):
conn = get_connection()
c = conn.cursor()
if force:
c.execute('DROP TABLE IF EXISTS user_message')
c.execute('''
CREATE TABLE IF NOT EXISTS user_message (
id INTEGER PRIMARY KEY,
user_id INTEGER NOT NULL,
first_name TEXT NOT NULL,
text TEXT NOT NULL,
date DATETIME NOT NULL
)
''')
conn.commit()
def add_message(user_id: int, first_name: str, text: str, date: datetime):
conn = get_connection()
c = conn.cursor()
c.execute('INSERT INTO user_message (user_id, first_name, text, date) Values (?, ?, ?, ?)',
(user_id, first_name, text, date))
c.execute('')
conn.commit()
Main.py(сохранение записей из телеграм чата):
@dp.message_handler()
async def echo_message(message: types.Message):
add_message(message.from_user.id, message.from_user.first_name, message.text,
message.date)
user_id = message.from_user.id
first_name = message.from_user.first_name
Что нужно прописать во второй c.execute('') ?
Нужно удалять данные за последний месяц или неделю при вызове данной функции add_message.
Ответы (1 шт):
Автор решения: Arseni Mourzenko
→ Ссылка
Последний месяц:
DELETE FROM user_message WHERE date < NOW() - INTERVAL '1' MONTH
Неделя:
DELETE FROM user_message WHERE date < NOW() - INTERVAL '7 days'
Ещё замечу, что вы записываете даты без информации о часовых поясах, и при этом дата при записи сообщения судя по всему генерируется через Python.
Если вы совершенно уверенны в том, что вы делаете, то тогда всё нормально. Если же нет, то перепишите код, используя нормальный тип в базе данных, и определите в базе данных значение по умолчанию для даты.