import os from dotenv import load_dotenv from sqlalchemy import create_engine from sqlalchemy.ext.asyncio import async_sessionmaker, create_async_engine from sqlalchemy.orm import DeclarativeBase load_dotenv() DATABASE_URL = os.getenv("IGNIS_DATABASE_URL", "sqlite+aiosqlite:///./ignis.db") SYNC_DATABASE_URL = os.getenv("IGNIS_SYNC_DATABASE_URL", "sqlite:///./ignis.db") engine = create_async_engine(DATABASE_URL, echo=False) sync_engine = create_engine(SYNC_DATABASE_URL) async_session = async_sessionmaker(engine, expire_on_commit=False) class Base(DeclarativeBase): pass async def init_db(): # Импортируем модели здесь, чтобы metadata была полностью зарегистрирована # до create_all даже в тестовых и утилитных сценариях. from app.models import api_key, device, event_log, schedule # noqa: F401 async with engine.begin() as conn: # Создает таблицы, если их еще нет await conn.run_sync(Base.metadata.create_all)