File size: 1,264 Bytes
3168916
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# db.py
# -*- coding: utf-8 -*-
import os
from pathlib import Path
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from typing import Optional

# Importa a Base (declarative_base) do seu models.py
# models.py deve definir: Base = declarative_base()
from models import Base

# Caminho do banco SQLite
BASE_DIR = Path(__file__).resolve().parent
DATA_DIR = BASE_DIR / "data"
DATA_DIR.mkdir(parents=True, exist_ok=True)

DB_PATH = str(DATA_DIR / "db.sqlite")

# Cria o engine e a fábrica de sessões
engine = create_engine(
    f"sqlite:///{DB_PATH}",
    connect_args={"check_same_thread": False},  # necessário para SQLite + threads do Streamlit
    echo=False,
    pool_pre_ping=True,
    future=True,
)

SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)

def init_db() -> None:
    """

    Cria as tabelas caso não existam (com base no models.Base).

    Execute isso no boot do app.

    """
    DATA_DIR.mkdir(parents=True, exist_ok=True)
    Base.metadata.create_all(bind=engine)

def get_session_safe():
    """

    Retorna uma sessão do SQLAlchemy para uso com 'with' ou try/finally.

    Obs.: Lembre-se de fechar: db.close()

    """
    return SessionLocal()