"Injection données dans Tables Meudon et Roissy"

This commit is contained in:
2025-04-12 17:38:07 +02:00
parent 415a70ff47
commit f859288e38

78
Inventaires.py Normal file
View File

@@ -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 quaucune valeur nest 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}")