40 lines
1 KiB
Python
40 lines
1 KiB
Python
from sqlalchemy import create_engine
|
|
from sqlalchemy.orm import sessionmaker, declarative_base
|
|
from actions.config.config import Config
|
|
|
|
|
|
# Base para os modelos ORM
|
|
Base = declarative_base()
|
|
|
|
|
|
def get_database_settings():
|
|
"""Lê as configurações do arquivo database/postgres.json"""
|
|
return Config.get("database/postgres.json")
|
|
|
|
|
|
def get_postgres_engine():
|
|
"""Cria e retorna a engine PostgreSQL."""
|
|
db = get_database_settings()
|
|
|
|
dsn = (
|
|
f"postgresql+psycopg2://{db.user}:{db.password}@"
|
|
f"{db.host}:{db.port}/{db.name}"
|
|
)
|
|
|
|
engine = create_engine(
|
|
dsn,
|
|
echo=bool(getattr(db, "debug", False)),
|
|
pool_pre_ping=bool(db.pool.pre_ping),
|
|
pool_size=int(db.pool.size),
|
|
max_overflow=int(db.pool.max_overflow),
|
|
connect_args={"connect_timeout": 10},
|
|
)
|
|
|
|
return engine
|
|
|
|
|
|
# Criação da engine global
|
|
engine = get_postgres_engine()
|
|
|
|
# Criação da sessão ORM (SessionLocal)
|
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|