78 lines
2.5 KiB
Python
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()
|