# db_tools.py import streamlit as st from banco import engine from sqlalchemy import text # Ajuste a sintaxe conforme seu SGDB. Abaixo está para bancos comuns (Postgres, SQLite, MySQL*). # *MySQL funciona, mas o CREATE UNIQUE INDEX IF NOT EXISTS pode variar por versão. Ver obs. abaixo. SQLS = [ "ALTER TABLE usuarios ADD COLUMN nome VARCHAR(255);", "ALTER TABLE usuarios ADD COLUMN email VARCHAR(255);", "CREATE UNIQUE INDEX IF NOT EXISTS ix_usuarios_email ON usuarios (email);" ] def aplicar_alteracoes(): with engine.begin() as conn: for sql in SQLS: conn.execute(text(sql)) def verificar_colunas(): # Tenta listar colunas da tabela usuarios (funciona na maioria dos drivers) try: with engine.begin() as conn: result = conn.execute(text("PRAGMA table_info(usuarios)")) # SQLite cols = [row[1] for row in result.fetchall()] return cols except: # Fallback genérico usando INFORMATION_SCHEMA (Postgres/MySQL) try: with engine.begin() as conn: result = conn.execute(text(""" SELECT column_name FROM information_schema.columns WHERE table_name = 'usuarios' ORDER BY ordinal_position; """)) cols = [row[0] for row in result.fetchall()] return cols except: return None def main(): st.title("🛠️ Ferramentas de Banco") if st.session_state.get("perfil") != "admin": st.error("❌ Acesso restrito ao administrador.") return st.info("Este utilitário adiciona as colunas **nome** e **email** na tabela **usuarios** e cria o índice único do **email**.") cols = verificar_colunas() if cols: st.write("📋 Colunas atuais em `usuarios`:", ", ".join(cols)) else: st.warning("Não foi possível listar colunas automaticamente. Ainda é possível aplicar as alterações.") if st.button("✅ Aplicar alterações (nome/email + índice)"): try: aplicar_alteracoes() st.success("Alterações aplicadas com sucesso! Reinicie a aplicação se necessário.") except Exception as e: st.error(f"Erro ao aplicar alterações: {e}") st.stop() st.caption("Dica: após aplicar, confira o cadastro/edição de usuários e o login para ver email/nome funcionando.")