Files
Gestion_sondes/Inventaires.py

87 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Insertion des tableaux excel dans les tables respectives(Meudon & Roissy).
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", usecols="C:E", header=1)
df.columns = ["Id_Article", "Prix", "Quantité"]
df = df[["Id_Article", "Quantité", "Prix"]] # Réorganisation
# Nettoyage : retirer les lignes où Quantité est vide ou invalide
df = df.dropna(subset=["Quantité"])
df = df[df["Quantité"].astype(str).str.strip() != ""]
df = df[pd.to_numeric(df["Quantité"], errors='coerce').notnull()]
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}")