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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    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 confirmé
    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
    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 confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    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.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    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 actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    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 : 143
    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
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    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

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