"Injection données dans Tables Meudon et Roissy"
This commit is contained in:
78
Inventaires.py
Normal file
78
Inventaires.py
Normal 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 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}")
|
||||
Reference in New Issue
Block a user