IOI-RUN / db_tools.py
Roudrigus's picture
Upload 82 files
0f0ef8d verified
# 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.")