File size: 2,536 Bytes
0f0ef8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

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