Как хранить INI параметры из бд в pydantic BaseSettings
Было решено хранить ini параметры в бд, т.к. их много и они постоянно изменяются Вопрос: как их записать в pydantic BaseSettings, в котором уже хранятся данные для конекта. Получается так, что для создание сессий sqlalchemy нужны параметры коннекта. А для получения данных из таблицы с ini нужна сессия.
from pydantic_settings import BaseSettings
from pydantic import Field
from dotenv import load_dotenv
from sqlalchemy import func
from sqlalchemy.orm import Session
from app.db import SessionLocal
load_dotenv()
class Setting(BaseSettings):
db_user: str = Field(..., env="DB_USER")
db_password: str = Field(..., env="DB_PASSWORD")
db_host: str = Field(..., env="DB_HOST")
db_port: int = Field(..., env="DB_PORT")
db_name: str = Field(..., env="DB_NAME")
id_norm_for_course: list[str]
@property
def db_url(self) -> str:
return f"oracle+oracledb://{self.db_user}:{self.db_password}@{self.db_host}:{self.db_port}/?service_name={self.db_name}"
@property
def id_norm_for_course(self) -> list[str]:
try:
if not hasattr(self, "_id_norm_for_course"):
res: str = SessionLocal().query(func.GET_INIT_PARAM('OPT_NUM_COURSE')).scalar()
return res.replace(" ", "").split(',')
return self._id_norm_for_course
except Exception as err:
raise err
ошибка:
ImportError: cannot import name 'setting' from partially initialized module 'app.core.config' (most likely due to a circular import)