Files
controles/sql/migrate_db.py
Mateus Tavares 2b1668206d - inits centralizados, READMEs atualizados
- padronizando o nome de get_db_connection e session para get_db_session, para não confundir com session do Flask ou sessoes web

- corrigindo potenciais erros

-- has_permission nao consegue com lazy load carregar permission depois de load_user fechar a conexao, entao joinedLoad com Permission antes de fechar

-- db.rollback não existe caso db = get_db_session() apareça muito depois dentro do try, padronizando antes de try

--- comparar role por nivel (Role.SECRETARIO_GERAL) e nao por nome ("Secretario Geral")

- unificacao de get_otp_qr_code

- mudança de nowutc() para now(UTC) conforme novo padrão
2026-02-20 17:19:15 -03:00

72 lines
2.0 KiB
Python

import os
import sqlite3
import sys
from pathlib import Path
from dotenv import load_dotenv
# Adiciona o diretório raiz ao PYTHONPATH
ROOT_DIR = Path(__file__).resolve().parents[1]
if str(ROOT_DIR) not in sys.path:
sys.path.insert(0, str(ROOT_DIR))
# Carregar .env antes de importar módulos
load_dotenv(ROOT_DIR / ".env")
from functions.base import Base, engine
from functions.database import init_database
from functions.rbac import init_rbac
def execute_sql_file(file_path):
"""Executa um arquivo SQL"""
print(f"Executando arquivo {file_path}...")
try:
with open(file_path, 'r') as sql_file:
sql_commands = sql_file.read().split(';')
conn = sqlite3.connect('database.db')
cursor = conn.cursor()
for command in sql_commands:
command = command.strip()
if command:
try:
cursor.execute(command)
except sqlite3.OperationalError as e:
if "already exists" in str(e):
print(f"Aviso: {str(e)}")
else:
raise e
conn.commit()
conn.close()
print(f"Arquivo {file_path} executado com sucesso!")
except Exception as e:
print(f"Erro ao executar {file_path}: {str(e)}")
raise e
def migrate_database():
"""Executa a migração do banco de dados"""
print("Inicializando banco de dados...")
# Criar todas as tabelas
Base.metadata.create_all(engine)
# Executar scripts SQL
sql_dir = Path(__file__).parent
rbac_tables_sql = sql_dir / 'rbac_tables.sql'
if rbac_tables_sql.exists():
execute_sql_file(rbac_tables_sql)
# Inicializar RBAC
init_rbac()
# Inicializar banco de dados
init_database()
print("Migração concluída com sucesso!")
if __name__ == '__main__':
migrate_database()