Application multi utilisateur
Bonjour,
j'ai une petite application qui permet de gérer une base de donnée.
Cette base de donnée apparait via un QTableWidget et est alimentée par un dataframe (pandas) enregistré en dur sous un csv.
Cette dataframe est instanciée lors de l'ouverture de l'application et c'est à partir de cette instance que j'appelle le "to_csv()" de pandas à chaque évènement de modif de la QTableWidget (ou plutôt de la modification de ses items).
jusque là, pas de souci, tout marche bien! (enfin tant que je suis seul à utiliser l'interface)
Si différents utilisateurs ouvre l'application, il se trouve que l'instance initiale de ma base de donnees est gérée indépendamment pour chaque utilisateur.
Du coup, je me retrouve avec 2 applications qui viennent "écraser" successivement chaque nouvelle versions en ignorant les modifs des autres utilisateurs.
Pour solutionner cela, je me suis dit qu'il fallait que je n'instancie pas une seule fois ma dataframe mais que je l'instancie à chaque modif de mon QTableWidget. Comme cela, à chaque modif de chaque utilisateur le to_csv() associé à la modif implique que n'importe quel autre utilisateur qui modifie quelque chose depuis son application ré-ouvre le csv le plus récent...
spontanément je ne l'avais pas fait parce que je trouvais ça lourd... et pas élégant.
actuellement, j'ai positionné ce bout de code dès le début de la fonction appelée lors d'une modification d'un de mes items (contenu dans ma QTable Widget):
Code:
1 2 3 4 5
| with open(str(self.instance_dt.nom_fichier_bdd) + str(".csv"), newline='', encoding="utf-8-sig") as csvfile:
self.ui.dataframe_from_csv = pd.DataFrame(csv.reader(csvfile, delimiter=';'))
self.ui.dataframe_from_csv.columns = self.ui.dataframe_from_csv.iloc[0]
self.ui.dataframe_from_csv = self.ui.dataframe_from_csv.drop(0)
self.ui.dataframe_from_csv = self.ui.dataframe_from_csv.sort_values(by=["N°DT"]) |
Mais j'ai l'impression que cela reste maladroit...
est-ce que cette approche d'utiliser un with open à chaque fois qu'une modif est faite se pratique? est-ce viable?
comment sont gérées les bases de données ou différents utilisateurs peuvent modifier en même temps les données contenues?
merci,
cordialement,
clem