IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Pyinstaller et .db


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Points : 65
    Points
    65
    Par défaut Pyinstaller et .db
    Salut a tous;

    j'ai un question sur la methode d'inclue un fichier de base de données .db dans le fichier final .exe ceci avec l'utilisation de Pyinstaller

    J'ai utilisé le code ci-dessous, mais la base de données ne conserve pas les modifications à chaque nouveau lancement du programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from Design import Ui_MainWindow
    import os
    import sqlite3
    import pandas as pd
    import sys
     
     
    def resource_path(relative_path):
        try:           
            base_path = sys._MEIPASS
        except Exception:
            base_path = os.path.abspath(".")
        return os.path.join(base_path, relative_path)
     
    db_path = resource_path("test.db")
     
     
    class MyWindow(QMainWindow, Ui_MainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
            self.setupUi(self)
     
            self.btn_insert.clicked.connect(self.ajouter)
            self.btn_show.clicked.connect(self.afficher)
            self.btn_delete.clicked.connect(self.supprimer)
        def ajouter(self):
                try:
                    connection = sqlite3.connect(db_path)
                    cursor = connection.cursor()
                    a=self.txb_name.text()
                    b=self.txb_pass.text()
                    cursor.execute("insert into user (name, password) values (?, ?)",(a, b))
                    connection.commit()
                    self.txb_info.setText("Record inserted successfully into SqliteDb_developers table ")
                    cursor.close()
                except sqlite3.Error as error:
                    print("Error while executing sqlite script", error)
     
        def afficher(self):
            connection = sqlite3.connect(db_path)
            self.table.clearContents()
            df = pd.read_sql_query('SELECT * FROM user ',connection)
            print(df)
            for i in range(len(df.index)):
                for j in range(len(df.columns)):
                    item = QTableWidgetItem()
                    text = "{}".format(str(df.iat[i, j]))
                    item.setText(text)
                    item.setTextAlignment(Qt.AlignCenter)
                    self.table.setItem(i, j, item)
        def supprimer(self):
            connection = sqlite3.connect(db_path)
            cursor = connection.cursor()
            a = self.txb_name.text()
            cursor.execute("""DELETE from user where name = ?""", (a,))
            connection.commit()
            self.txb_info.setText("Record deleted successfully ")
            cursor.close()
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        window = MyWindow()
        window.show()
        sys.exit(app.exec_())

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par rabeh.ram Voir le message
    J'ai utilisé le code ci-dessous, mais la base de données ne conserve pas les modifications à chaque nouveau lancement du programme
    L'exécutable fabriqué par pyinstaller est décompressé dans un répertoire temporaire à chaque lancement et on se retrouve avec une base de donnée "vierge".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    L'exécutable fabriqué par pyinstaller est décompressé dans un répertoire temporaire à chaque lancement et on se retrouve avec une base de donnée "vierge".

    - W
    Y a-t-il une solution à ce problème?

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour

    Citation Envoyé par rabeh.ram Voir le message
    Y a-t-il une solution à ce problème?
    Oui. Dans pyinstaller, il faut prendre l'option "onedir" et pas "onefile". Ainsi, tous les fichiers nécessaires à l'exécution seront dans le même répertoire (donc, non-archivés), et ce répertoire conservera les fichiers de données d'une cession à l'autre.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par rabeh.ram Voir le message
    Y a-t-il une solution à ce problème?
    Il faudrait déjà définir/connaître le cycle de vie de ces données utilisateurs.
    Si dans quelques semaines, vous livrez une nouvelle mouture de code, est-ce qu'on repart à zéro ou est-ce qu'on "préserve" les données existantes?
    Et il y a des tas d'autres questions à se poser suivant la nature de votre application...

    Ce n'est qu'après avoir une idée +/- précise de tous les soucis à anticiper de ce côté qu'on pourra imaginer une solution et voir comment elle répond aux besoins (avant de la coder avec Python).


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre habitué
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 131
    Points : 186
    Points
    186
    Par défaut
    Salut,
    Une autre idée c'est de la "sortir" du répertoire temporaire en la copiant dans un dossier créé par exemple C:\ProgramData\MonAppli
    Et de travailler avec, au lancement du programme, il suffit de contrôler si le dossier et la DB existent, si oui on travaille avec et autrement on créé le dossier et on y enregistre la DB de base.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Diablo76 Voir le message
    Une autre idée c'est de la "sortir" du répertoire temporaire en la copiant dans un dossier créé par exemple C:\ProgramData\MonAppli
    C'est une solution à un problème qui n'a pas été posé.

    Déjà "C:\ProgramData\MonAppli" est "multi-utilisateur" (pas dans le home directory) ce qui est (ou pas) souhaité (avec sqlite?) et qui pose des soucis de protection du fichier.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre habitué
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 131
    Points : 186
    Points
    186
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est une solution à un problème qui n'a pas été posé.

    Déjà "C:\ProgramData\MonAppli" est "multi-utilisateur" (pas dans le home directory) ce qui est (ou pas) souhaité (avec sqlite?) et qui pose des soucis de protection du fichier.

    - W
    J'ai précisé par exemple, maintenant le PO fait ce qu'il veut....

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Diablo76 Voir le message
    J'ai précisé par exemple, maintenant le PO fait ce qu'il veut....
    Il ne fait pas ce qu'il veut puisqu'il doit trouver ce qui sera adapté (un compromis entre avantages/inconvénients) au contexte de l'application.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour

    S'il y a potentiellement plusieurs utilisateurs de ce programme sur le même PC, et qu'on veut laisser chacun gérer ses propre données, il y a une solution intéressante: placer ces données dans le home de chacun. Le programme étant, bien sûr à l'emplacement normal et public pour que tous les utilisateurs puissent l'exécuter.

    L'emplacement du home de l'utilisateur en cours est facile à trouver:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    home = os.path.expanduser('~')
    Il ne reste plus qu'à créer un sous-répertoire et placer les données de l'utilisateur dedans.

    Et ça marche aussi bien sous Windows que sous Linux.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    S'il y a potentiellement plusieurs utilisateurs de ce programme sur le même PC, et qu'on veut laisser chacun gérer ses propre données, il y a une solution intéressante: placer ces données dans le home de chacun.
    Peut être mais on peut aussi vouloir dans ce cas "partager" tout ou partie des données des n-utilisateurs via une "vraie" base de données et avoir une approche client lourd.

    Ce ne sont pas les solutions qui manquent mais une description du problème à résoudre... que ne peut fournir que le PO.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Ce ne sont pas les solutions qui manquent mais une description du problème à résoudre... que ne peut fournir que le PO
    C'est un problème connu, particulièrement avec l'informatique dans les entreprises:
    - celui qui a le besoin mais ne connait pas les techniques disponibles ne sait pas le décrire
    - celui qui a les solutions ne connait pas le besoin

    Chacun des deux doit faire un pas vers l'autre, sinon rien n'avance...
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  13. #13
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    C'est un problème connu, particulièrement avec l'informatique dans les entreprises:
    - celui qui a le besoin mais ne connait pas les techniques disponibles ne sait pas le décrire
    - celui qui a les solutions ne connait pas le besoin

    Chacun des deux doit faire un pas vers l'autre, sinon rien n'avance...
    Nous sommes supposément ici dans un forum de développeurs Python.
    Donc, à priori, le PO est capable de s'exprimer et de raconter les difficultés qu'il rencontre.

    S'il ne s'exprime pas, peut être qu'il est allé se pendre à cause de ce défaut de conception qui recule la date de livraison de son projet, mais possible (ce que je lui souhaite) qu'il soit parti en week-end et déconnecté un peu de tout çà. Et en attendant, accumuler le florilège de toutes les solutions possibles à un problème non posé n'est pas interdit: si ça vous amuse... mais je doute que ce soit utile.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. PyInstaller, un tuto ?
    Par rambc dans le forum Bibliothèques tierces
    Réponses: 2
    Dernier message: 28/02/2009, 11h30
  2. Fichier Version PyInstaller
    Par metalamania dans le forum Déploiement/Installation
    Réponses: 2
    Dernier message: 30/07/2008, 22h59
  3. Compilation avec PyInstaller
    Par Jiyuu dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 29/04/2008, 20h01
  4. Programme pour PyInstaller
    Par metalamania dans le forum Déploiement/Installation
    Réponses: 3
    Dernier message: 01/06/2007, 16h16
  5. pyinstaller sous Linux
    Par jbjweb dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 20/02/2007, 21h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo