#!/usr/bin/env python3 """ Скрипт для проставления status='legacy' всем существующим записям в post_from_telegram_suggest. Добавляет колонку status, если её нет, затем обновляет все строки. """ import argparse import asyncio import os import sys from pathlib import Path project_root = Path(__file__).resolve().parent.parent sys.path.insert(0, str(project_root)) import aiosqlite from logs.custom_logger import logger DEFAULT_DB_PATH = "database/tg-bot-database.db" def _column_exists(rows: list, name: str) -> bool: """PRAGMA table_info returns (cid, name, type, notnull, dflt_value, pk).""" for row in rows: if row[1] == name: return True return False async def main(db_path: str) -> None: db_path = os.path.abspath(db_path) if not os.path.exists(db_path): logger.error("База данных не найдена: %s", db_path) print(f"Ошибка: база данных не найдена: {db_path}") return async with aiosqlite.connect(db_path) as conn: await conn.execute("PRAGMA foreign_keys = ON") # Проверяем наличие колонки status cursor = await conn.execute( "PRAGMA table_info(post_from_telegram_suggest)" ) rows = await cursor.fetchall() await cursor.close() if not _column_exists(rows, "status"): logger.info("Добавление колонки status в post_from_telegram_suggest") await conn.execute( "ALTER TABLE post_from_telegram_suggest " "ADD COLUMN status TEXT NOT NULL DEFAULT 'suggest'" ) await conn.commit() print("Колонка status добавлена.") else: print("Колонка status уже существует.") # Обновляем все существующие записи на legacy await conn.execute( "UPDATE post_from_telegram_suggest SET status = 'legacy'" ) await conn.commit() cursor = await conn.execute("SELECT changes()") row = await cursor.fetchone() updated = row[0] if row else 0 await cursor.close() logger.info("Обновлено записей в post_from_telegram_suggest: %d", updated) print(f"Обновлено записей: {updated}") if __name__ == "__main__": parser = argparse.ArgumentParser( description="Backfill status='legacy' для post_from_telegram_suggest" ) parser.add_argument( "--db", default=os.environ.get("DB_PATH", DEFAULT_DB_PATH), help="Путь к БД (или DB_PATH)", ) args = parser.parse_args() asyncio.run(main(args.db))