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