fix: единый singleton engine в bd, убраны 17 локальных make_engine()
- bd/__init__.py: добавлены get_engine() и get_session() — один SQLAlchemy engine на весь процесс - make_engine(): pool_size=5, max_overflow=5, pool_timeout=30, pool_recycle=1800 - Все 17 route-файлов: убраны локальные get_session()/make_engine(), импорт из bd - transfer_crud.py: _get_session() → get_session() из bd - init_data_base.py: get_engine() вместо make_engine() - Результат: 78 idle соединений → 1
This commit is contained in:
@@ -4,7 +4,7 @@ import importlib
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
from bd import Settings, make_engine
|
||||
from bd import Settings, get_engine
|
||||
from sqlalchemy import text
|
||||
from sqlalchemy.exc import SQLAlchemyError
|
||||
from pydantic import BaseModel
|
||||
@@ -48,7 +48,7 @@ async def create_tables():
|
||||
|
||||
Endpoint вызывается по нажатию кнопки в UI (POST).
|
||||
"""
|
||||
engine = make_engine()
|
||||
engine = get_engine()
|
||||
|
||||
metadatas = collect_metadatas()
|
||||
if not metadatas:
|
||||
@@ -73,7 +73,7 @@ async def create_tables():
|
||||
@router.post("/db/migrate-cascade-user", dependencies=[Depends(require_admin_key)])
|
||||
async def migrate_cascade_user():
|
||||
"""Добавляет FK responses.user_id → users.id ON DELETE CASCADE, если ещё не существует."""
|
||||
engine = make_engine()
|
||||
engine = get_engine()
|
||||
try:
|
||||
with engine.connect() as conn:
|
||||
conn.execute(text("""
|
||||
@@ -97,7 +97,7 @@ async def migrate_cascade_user():
|
||||
@router.post("/db/migrate-users", dependencies=[Depends(require_admin_key)])
|
||||
async def migrate_users():
|
||||
"""Добавляет колонки username и hashed_password в таблицу users, если они ещё не существуют."""
|
||||
engine = make_engine()
|
||||
engine = get_engine()
|
||||
try:
|
||||
with engine.connect() as conn:
|
||||
conn.execute(text("""
|
||||
@@ -118,7 +118,7 @@ class ClearDBIn(BaseModel):
|
||||
@router.post("/db/migrate", dependencies=[Depends(require_admin_key)])
|
||||
async def migrate_tables():
|
||||
"""Приводит схему БД в соответствие с моделями: убирает устаревшие колонки, добавляет новые."""
|
||||
engine = make_engine()
|
||||
engine = get_engine()
|
||||
migrations = [
|
||||
# Убираем старый FK и колонку group.user_id (если остался от прежней схемы)
|
||||
'ALTER TABLE "group" DROP COLUMN IF EXISTS user_id',
|
||||
@@ -150,7 +150,7 @@ async def clear_tables(payload: ClearDBIn):
|
||||
if not payload.confirm:
|
||||
raise HTTPException(status_code=400, detail="Confirmation required")
|
||||
|
||||
engine = make_engine()
|
||||
engine = get_engine()
|
||||
|
||||
metadatas = collect_metadatas()
|
||||
if not metadatas:
|
||||
|
||||
Reference in New Issue
Block a user