From f859288e38b92fb00ba5d60de2cc763e4bb9c75c Mon Sep 17 00:00:00 2001 From: Michel Date: Sat, 12 Apr 2025 17:38:07 +0200 Subject: [PATCH] =?UTF-8?q?"Injection=20donn=C3=A9es=20dans=20Tables=20Meu?= =?UTF-8?q?don=20et=20Roissy"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventaires.py | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Inventaires.py diff --git a/Inventaires.py b/Inventaires.py new file mode 100644 index 0000000..ba34bc5 --- /dev/null +++ b/Inventaires.py @@ -0,0 +1,78 @@ +import streamlit as st +import pandas as pd +import mysql.connector + +# 🔐 Identifiants MySQL +MYSQL_HOST = "54.36.188.119" +MYSQL_USER = "michel" +MYSQL_PASSWORD = "#SO2&1nf%mZ@jfh" + +# Connexion à la base MySQL +def get_connection(database_name): + return mysql.connector.connect( + host=MYSQL_HOST, + user=MYSQL_USER, + password=MYSQL_PASSWORD, + database=database_name + ) + +# Fonction d'insertion +def inserer_donnees(conn, data, date_choisie): + cursor = conn.cursor() + for _, row in data.iterrows(): + cursor.execute(""" + INSERT INTO Inventaire (Id_Article, Quantité, Prix, Date) + VALUES (%s, %s, %s, %s) + """, (row['Id_Article'], row['Quantité'], row['Prix'], date_choisie)) + conn.commit() + cursor.close() + +# Interface Streamlit +st.title("📦 Import Inventaire dans MySQL") + +uploaded_file = st.file_uploader("📥 Charger le fichier Excel (.xlsx)", type="xlsx") + +if uploaded_file: + try: + df = pd.read_excel(uploaded_file, sheet_name="Inventaire") + + colonnes_attendues = ["Id_Article", "Quantité", "Prix"] + if all(col in df.columns for col in colonnes_attendues): + st.success("✅ Fichier reconnu") + st.dataframe(df) + # 🔍 Validation des types pour Quantité et Prix + try: + df["Quantité"] = df["Quantité"].astype(float).round(2) + df["Prix"] = df["Prix"].astype(float).round(2) + except ValueError as ve: + st.error("❌ Erreur : La colonne 'Quantité' ou 'Prix' contient une valeur non numérique.") + st.stop() + + # ✅ Optionnel : vérifier qu’aucune valeur n’est négative + if (df["Quantité"] < 0).any() or (df["Prix"] < 0).any(): + st.warning("⚠️ Certaines valeurs de 'Quantité' ou 'Prix' sont négatives.") + + date_choisie = st.date_input("🗓️ Choisir la date pour cet inventaire") + # Mapping affichage vers noms de base MySQL + base_mapping = { + "Roissy": "Roissy", + "Meudon": "Meudon" + } + + base_affichee = st.selectbox("📍 Choisir la base de destination", list(base_mapping.keys())) + nom_base_mysql = base_mapping[base_affichee] + + if st.button("✅ Insérer dans la base sélectionnée"): + try: + conn = get_connection(nom_base_mysql) + inserer_donnees(conn, df, date_choisie) + conn.close() + st.balloons() + st.success(f"✅ Insertion réussie dans {base_affichee}") + st.toast(f"{len(df)} lignes ajoutées pour la date {date_choisie}", icon="📦") + except Exception as e: + st.error(f"❌ Erreur lors de l'insertion : {e}") + else: + st.error(f"❌ Le fichier doit contenir les colonnes : {colonnes_attendues}") + except Exception as e: + st.error(f"❌ Erreur de lecture du fichier : {e}")