Spaces:
Running
Running
| # 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.") | |