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()