cda / backend /app /database.py
github-actions
Sync from GitHub de3ca9b6f57913ea7bbc4e8a3b73a8d5f7844d2d
7ad8558
from pathlib import Path
from sqlalchemy import create_engine, inspect, text
from sqlalchemy.orm import DeclarativeBase, sessionmaker
BASE_DIR = Path(__file__).resolve().parent.parent
DATA_DIR = BASE_DIR / "data"
DATA_DIR.mkdir(parents=True, exist_ok=True)
DATABASE_URL = f"sqlite:///{DATA_DIR / 'app.db'}"
class Base(DeclarativeBase):
pass
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
def ensure_property_schema() -> None:
inspector = inspect(engine)
if "properties" not in inspector.get_table_names():
return
existing_columns = {column["name"] for column in inspector.get_columns("properties")}
migrations = {
"num_bloco": "ALTER TABLE properties ADD COLUMN num_bloco VARCHAR(30)",
"num_inscricao": "ALTER TABLE properties ADD COLUMN num_inscricao VARCHAR(30)",
"cod_endloc_logradouro": "ALTER TABLE properties ADD COLUMN cod_endloc_logradouro VARCHAR(30)",
"nme_endloc_logradouro": "ALTER TABLE properties ADD COLUMN nme_endloc_logradouro VARCHAR(150)",
"num_endloc_endereco": "ALTER TABLE properties ADD COLUMN num_endloc_endereco VARCHAR(30)",
"num_endloc_unidade": "ALTER TABLE properties ADD COLUMN num_endloc_unidade VARCHAR(30)",
"nme_endloc_bairro_cdl": "ALTER TABLE properties ADD COLUMN nme_endloc_bairro_cdl VARCHAR(120)",
"rh_nome": "ALTER TABLE properties ADD COLUMN rh_nome VARCHAR(80)",
"rh_valor": "ALTER TABLE properties ADD COLUMN rh_valor FLOAT",
"coord_x": "ALTER TABLE properties ADD COLUMN coord_x FLOAT",
"coord_y": "ALTER TABLE properties ADD COLUMN coord_y FLOAT",
"ano_exercicio": "ALTER TABLE properties ADD COLUMN ano_exercicio FLOAT",
"num_versao": "ALTER TABLE properties ADD COLUMN num_versao FLOAT",
"idf_reg_regiao_homogenea": "ALTER TABLE properties ADD COLUMN idf_reg_regiao_homogenea FLOAT",
"area_total_detalhe": "ALTER TABLE properties ADD COLUMN area_total_detalhe VARCHAR(1000)",
"area_privativa_detalhe": "ALTER TABLE properties ADD COLUMN area_privativa_detalhe VARCHAR(1000)",
"latitude": "ALTER TABLE properties ADD COLUMN latitude FLOAT",
"longitude": "ALTER TABLE properties ADD COLUMN longitude FLOAT",
"finalidade_oferta": "ALTER TABLE properties ADD COLUMN finalidade_oferta VARCHAR(50)",
"area_total_oferta": "ALTER TABLE properties ADD COLUMN area_total_oferta FLOAT",
"area_privativa_oferta": "ALTER TABLE properties ADD COLUMN area_privativa_oferta FLOAT",
"valor_oferta": "ALTER TABLE properties ADD COLUMN valor_oferta FLOAT",
"descricao_oferta": "ALTER TABLE properties ADD COLUMN descricao_oferta TEXT",
"observacao": "ALTER TABLE properties ADD COLUMN observacao TEXT",
"url": "ALTER TABLE properties ADD COLUMN url TEXT",
"imobiliaria": "ALTER TABLE properties ADD COLUMN imobiliaria VARCHAR(150)",
"codigo": "ALTER TABLE properties ADD COLUMN codigo VARCHAR(80)",
"infra": "ALTER TABLE properties ADD COLUMN infra TEXT",
"padrao": "ALTER TABLE properties ADD COLUMN padrao VARCHAR(80)",
"conservacao": "ALTER TABLE properties ADD COLUMN conservacao VARCHAR(80)",
"vaga": "ALTER TABLE properties ADD COLUMN vaga VARCHAR(80)",
}
with engine.begin() as connection:
for column_name, statement in migrations.items():
if column_name not in existing_columns:
connection.execute(text(statement))