Files
Zilant2025/evt_prefetch.py
T
2025-09-25 20:42:48 +03:00

78 lines
2.5 KiB
Python

import os
import mysql.connector
from mysql.connector import Error
from datetime import datetime, timedelta, timezone
from dotenv import load_dotenv
# Загрузка переменных окружения
load_dotenv()
MDB_HOST = os.getenv('MDB_HOST')
MDB_USER = os.getenv('MDB_USER')
MDB_PW = os.getenv('MDB_PW')
MDBASE = os.getenv('MDBASE')
def prefetch_all_events():
"""
Проверяет записи в таблице events и устанавливает флаг marked_to_publication
для записей, которые:
- имеют флаг is_visible = 1
- не имеют флага marked_to_publication = 1
- modified более часа назад от текущего времени (UTC)
"""
try:
# Подключение к базе данных
connection = mysql.connector.connect(
host=MDB_HOST,
user=MDB_USER,
password=MDB_PW,
database=MDBASE
)
# Установка временной зоны соединения в UTC
cursor_temp = connection.cursor()
cursor_temp.execute("SET time_zone = '+00:00'")
cursor_temp.close()
cursor = connection.cursor()
# Текущее время в UTC
current_time_utc = datetime.now(timezone.utc).replace(tzinfo=None)
one_hour_ago = current_time_utc - timedelta(hours=1)
# SQL запрос для обновления записей
update_query = """
UPDATE events
SET marked_to_publication = 1
WHERE is_visible = 1
AND marked_to_publication = 0
AND modified < %s
"""
# Выполнение запроса
cursor.execute(update_query, (one_hour_ago,))
updated_count = cursor.rowcount
# Фиксация изменений
connection.commit()
print(f"Обновлено записей: {updated_count}")
return updated_count
except Error as e:
print(f"Ошибка базы данных: {e}")
if 'connection' in locals() and connection.is_connected():
connection.rollback()
return 0
except Exception as e:
print(f"Общая ошибка: {e}")
return 0
finally:
if 'connection' in locals() and connection.is_connected():
cursor.close()
connection.close()
if __name__ == "__main__":
prefetch_all_events()