Résolution des conflits Git et nettoyage du code

This commit is contained in:
2025-05-07 09:51:19 +02:00
parent 96cb5e1bae
commit 1d18b5dd5b
11 changed files with 84 additions and 96 deletions

View File

@@ -1,87 +1,75 @@
# Insertion de données da l'app SG.
# Fichier démarré avec la commande dans le terminal >streamlit run Societe_Generale.py
import streamlit as st
import mysql.connector
from dotenv import load_dotenv
import os
from datetime import datetime
# Chargement des variables d'environnement
load_dotenv()
st.set_page_config(page_title="Insertion Mysql", layout="centered")
st.title("🗓️ Insertion dans une base MySQL")
st.title("📄 Insertion dans SG.Emprunts")
# Charger les identifiants
DB_HOST = ("54.36.188.119")
DB_USER = ("michel")
DB_PASSWORD = ("#SO2&1nf%mZ@jfh")
# Connexion directe à la base SG
conn = mysql.connector.connect(
host=os.getenv("DB_HOST"),
user=os.getenv("DB_USER"),
password=os.getenv("DB_PASSWORD"),
database="SG" # Nom de la base fixe
)
cursor = conn.cursor()
# Connexion sans DB initiale pour lister les bases
@st.cache_data
def get_databases():
conn = mysql.connector.connect(
host=DB_HOST,
user=DB_USER,
password=DB_PASSWORD
)
cursor = conn.cursor()
cursor.execute("SHOW DATABASES")
bases = [db[0] for db in cursor.fetchall()]
conn.close()
return bases
# Table fixe
table = "Emprunts"
# Connexion avec DB sélectionnée
def connect_to_db(db_name):
return mysql.connector.connect(
host=DB_HOST,
user=DB_USER,
password=DB_PASSWORD,
database=db_name
)
# Lecture des colonnes de la table
cursor.execute(f"DESCRIBE {table}")
colonnes = cursor.fetchall()
# --- Interface principale ---
# Détection de la clé primaire
cursor.execute(f"SHOW INDEX FROM {table} WHERE Key_name = 'PRIMARY'")
pk = cursor.fetchone()
primary_key = pk[4] if pk else None
base = st.selectbox("Choisir une base de données", get_databases())
if base:
conn = connect_to_db(base)
cursor = conn.cursor()
# Sélection champ date
champ_date_candidates = [col[0] for col in colonnes if "date" in col[1].lower()]
champ_date = st.selectbox("Champ de date", champ_date_candidates)
cursor.execute("SHOW TABLES")
tables = [table[0] for table in cursor.fetchall()]
table = st.selectbox("Choisir une table", tables)
# Paramètres dinsertion
nb_mois = st.number_input("Nombre d'insertions mensuelles", 1, 36, 6)
date_depart = st.date_input("Date de départ des insertions", value=datetime.today().date())
if table:
cursor.execute(f"DESCRIBE {table}")
colonnes = cursor.fetchall()
# Champs modifiables
champs_editables = [col for col in colonnes if col[0] != primary_key and col[0] != champ_date]
champs_choisis = []
st.subheader("Champs à insérer (hors clé primaire et champ de date)")
for col in champs_editables:
if st.checkbox(f"{col[0]} ({col[1]})", value=True):
champs_choisis.append(col[0])
# Détection clé primaire
cursor.execute(f"SHOW INDEX FROM {table} WHERE Key_name = 'PRIMARY'")
pk = cursor.fetchone()
primary_key = pk[4] if pk else None
# Formulaire principal
if champs_choisis:
with st.form(key="formulaire_emprunts"):
st.markdown("**Valeurs fixes pour les champs cochés**")
valeurs_fixes = {}
champ_date_candidates = [col[0] for col in colonnes if "date" in col[1].lower()]
champ_date = st.selectbox("Champ de date", champ_date_candidates)
for champ in champs_choisis:
col_type = next((c[1] for c in colonnes if c[0] == champ), "").lower()
nb_mois = st.number_input("Nombre d'insertions mensuelles", 1, 36, 6)
date_depart = st.date_input("Date de départ des insertions", value=datetime.today().date())
st.subheader("Champs à insérer (hors clé primaire et champ de date)")
champs_choisis = []
champs_editables = [col for col in colonnes if col[0] != primary_key and col[0] != champ_date]
for col in champs_editables:
if st.checkbox(f"{col[0]} ({col[1]})", value=True):
champs_choisis.append(col[0])
if "int" in col_type:
val = st.number_input(champ, step=1)
elif "decimal" in col_type or "float" in col_type:
val = st.number_input(champ, format="%.2f")
else:
val = st.text_input(champ)
with st.form("formulaire_insertion"):
st.markdown("**Valeurs fixes pour les champs cochés**")
valeurs_fixes = {}
for nom in champs_choisis:
val = st.text_input(nom)
valeurs_fixes[nom] = val if val != "" else None
valeurs_fixes[champ] = val
submit = st.form_submit_button("Insérer")
submit = st.form_submit_button("Insérer")
if submit:
try:
cursor = conn.cursor()
insert_count = 0
for i in range(nb_mois):
year = date_depart.year + (date_depart.month + i - 1) // 12
month = (date_depart.month + i - 1) % 12 + 1
@@ -100,7 +88,3 @@ if base:
except Exception as e:
st.error(f"❌ Erreur lors de linsertion : {e}")
conn.commit()
st.success(f"{insert_count} lignes insérées avec succès dans `{table}`.")
st.success(f"{insert_count} lignes insérées avec succès.")