| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | import loggingfrom contextvars import ContextVarfrom typing import Callableimport redisfrom sqlmodel import SQLModel, create_enginefrom sqlalchemy.ext.asyncio import create_async_engine, AsyncSessionfrom sqlalchemy.pool import AsyncAdaptedQueuePool, QueuePoolfrom sqlalchemy.orm import sessionmaker, scoped_sessionfrom config.config import settingsfrom config.database import db_settings, redis_settingsdb_state_default = {"closed": None, "conn": None, "ctx": None, "transactions": None}db_state = ContextVar("db_state", default=db_state_default.copy())# databaseconnect_args = {}database_url = db_settings.database_urlengine = create_engine(    database_url,    connect_args=connect_args,    poolclass=QueuePool,    pool_size=db_settings.DB_POOL_SIZE,    pool_recycle=db_settings.DB_POOL_RECYCLE,    echo=settings.DEBUG,    max_overflow=db_settings.DB_OVERLOW,)session = scoped_session(sessionmaker(bind=engine))async_database_url = db_settings.async_database_urlasync_engine = create_async_engine(    async_database_url,    connect_args=connect_args,    poolclass=AsyncAdaptedQueuePool,    pool_size=db_settings.DB_POOL_SIZE,    pool_recycle=db_settings.DB_POOL_RECYCLE,    echo=settings.DEBUG,    max_overflow=db_settings.DB_OVERLOW,)# 创建session元类async_session_local: Callable[..., AsyncSession] = sessionmaker(    class_=AsyncSession,    bind=async_engine,)def create_db_and_tables():    logging.debug("Creating database and tables")    import app.models  # noqa    SQLModel.metadata.create_all(async_engine)    logging.debug("Database and tables created successfully")# redisredis_pool = redis.ConnectionPool(    host=redis_settings.REDIS_HOST,    port=redis_settings.REDIS_PORT,    db=redis_settings.REDIS_DB,    password=redis_settings.REDIS_PASSWORD,    decode_responses=True,)redis_client = redis.Redis(connection_pool=redis_pool)
 |