| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- import logging
 
- from contextvars import ContextVar
 
- from typing import Callable
 
- import redis
 
- from sqlmodel import SQLModel, create_engine
 
- from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
 
- from sqlalchemy.pool import AsyncAdaptedQueuePool, QueuePool
 
- from sqlalchemy.orm import sessionmaker, scoped_session
 
- from config.config import settings
 
- from config.database import db_settings, redis_settings
 
- db_state_default = {"closed": None, "conn": None, "ctx": None, "transactions": None}
 
- db_state = ContextVar("db_state", default=db_state_default.copy())
 
- # database
 
- connect_args = {}
 
- database_url = db_settings.database_url
 
- engine = 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,
 
- )
 
- session = scoped_session(sessionmaker(bind=engine))
 
- async_database_url = db_settings.async_database_url
 
- async_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,
 
- )
 
- # 创建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")
 
- # redis
 
- redis_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)
 
 
  |