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 :

sqlite3 is locked


Sujet :

Python

  1. #21
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    bonjour
    Citation Envoyé par bilcosby Voir le message
    voici comment je procède:
    la connexion est bien fermé jusqu' a la prochaine requête !?
    Et alors ? ton code est bon uniquement si ton application ne fait que cette requete sql.

    Depuis 50ans(?), a partir du moment ou nous avons plusieurs requetes, nous faisons simple : une connexion au début de l'application et une déconnexion à la sortie. C'est plus simple à coder, plus sécuritaire (voir ton erreur) et plus rapide d'exécution ! Pourquoi tu désires faire autrement ? Il faut une énorme raison pour vouloir faire plus lent, moins sécuritaire et plus compliqué à coder

  2. #22
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 845
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bilcosby Voir le message
    bonne lecture !
    Pas besoin de lecture, juste de tester.
    Et de fait, après avoir créé une table "clients", ton code a parfaitement fonctionné (sur un Linux). J'ai pu remplir 8 clients d'affilée sans que cela ne plante.

    MAIS en ouvrant la table avec sqlitebrowser et en allant y effectuer une modif (sans la finaliser), en tentant de rajouter un client de plus depuis ton code j'ai eu alors le même message...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "/usr/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
        return self.func(*args)
      File "/tmp/cosby.py", line 57, in enregistrement
        cursor.execute('INSERT INTO clients VALUES (?,?)', new_client)
    sqlite3.OperationalError: database is locked

    De plus (je viens de tester) on a le même souci y compris si la bdd est ouverte une fois au début et fermée à la fin (mais ce n'est pas parce que le souci demeure que le conseil est mauvais, ouvrir une fois au début et fermer une fois à la fin reste meilleur qu'ouvrir+fermer à chaque insert).

    De là je ne vois qu'une chose à faire: checker à l'insert. Si la bdd est verrouillée, tu préviens l'utilisateur (tout comme tu le préviens en cas de doublon). Malheureusement sqlite ne sait pas gérer les connexions concurrentes donc à toi de gérer à sa place.

    Autre chose: découper en fonctions c'est bien. Mais pourquoi n'en faire que la moitié ? L'IHM aussi c'est un travail qui peut se positionner en fonction. Ainsi tu as un code encore plus souple dans lequel l'IHM n'est pas obligatoire (tu peux alors l'importer ailleurs pour bénéficier des fonctions que tu as créées).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #23
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 093
    Par défaut
    bilcosby,

    À chaque fois que tu cliques sur le bouton nommé "enregistrement", tu crées une nouvelle connexion, transaction et fermeture de ta base de données, c'est donc bien de multiples connexions que tu fais !

  4. #24
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 768
    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 768
    Par défaut
    Citation Envoyé par bilcosby Voir le message
    bon ben puisque vous insistez ! je colle tout :
    ...
    bonne lecture !
    La base de donnée n'est accédée que par la fonction enregistrement qui est appelée lorsqu'on clique sur le Button 'Enregistrer'. Du coup, cette fonction n'est pas appelée plusieurs fois en même temps. Et si on se retrouve avec "database is locked", c'est que la BDD est ouverte par autre chose (que cette application).

    Pour le reste, c'est du code de débutant et si vous n'avez pas le temps ou l'envie de faire l'effort de lire la documentation, regardez comment on fait d'autres pour coder des applications similaires, c'est votre choix...
    (et sans rapport avec la question posée).

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

  5. #25
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 561
    Par défaut
    si on reprends ton code:
    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
    # ****** ECRITURE BASE DE DONNEE******************************************
     
        if nomrecu:
             connection = sqlite3.connect("D:/Bureau 1/Formation python/BDD/sqlite/base1.db")
            cursor = connection.cursor()
            # Vérification si le client existe déjà
            cursor.execute("SELECT * FROM clients WHERE nom=? AND prenom=?", (nomrecu, prenomrecu))
            existant = cursor.fetchone()
            if existant:
                message_doublon()
                return
            new_client = (cursor.lastrowid, nomrecu, prenomrecu, tel1recu, tel2recu, villerecu, codepostalrecu, pubrecu)
            cursor.execute('INSERT INTO clients VALUES (?,?,?,?,?,?,?,?)', new_client)
            connection.commit()
            connection.close()
     
        else:
     
            show_error()
    si doublon, on ne ferme pas la base actuellement

  6. #26
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 768
    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 768
    Par défaut
    Citation Envoyé par umfred Voir le message
    si doublon, on ne ferme pas la base actuellement
    Bien vu mais ce n'est pas le code de départ.

    De plus celui ci est encore plus pourri (et illisible) d'où ma remarque... car on ne va pas relire attentivement un code pourri: si on ouvre la documentation de sqlite, il y est proposé une gestion des doublons bien plus simple.

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

  7. #27
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    merci tout le monde !!
    je vais revoir tout ça , j ai trop de "petite" merde de-ci delà, et je me doute bien que mon code est "pourri"...( mais grâce à vous je vais m améliorer !)
    j ai dans l idée d écrire des fonction sur des docs externe, je cru comprendre que "import" fait l équivalent de "include" de PHP !
    de fait ce sera plus clair pour moi ! est ce une bonne idée ?
    merci a tous

  8. #28
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 768
    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 768
    Par défaut
    Citation Envoyé par bilcosby Voir le message
    j ai dans l idée d écrire des fonction sur des docs externe, je cru comprendre que "import" fait l équivalent de "include" de PHP !
    de fait ce sera plus clair pour moi ! est ce une bonne idée ?
    include inclus un fichier (comme son nom l'indique). import est différent. De toutes façons, ce ne sera mieux que si vous prenez le temps d'ouvrir un tuto pour comprendre comment ça marche et ce qu'on peut faire avec.
    Dit autrement, c'est pas un outil d'organisation de votre code qui va améliorer la qualité de votre code (ni la rigueur avec laquelle vous l'écrivez).

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

  9. #29
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    certes, mais n étant pas un géni du codage, l expérience fera le reste...si je persévère !

    merci à tous...

  10. #30
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 768
    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 768
    Par défaut
    Citation Envoyé par bilcosby Voir le message
    certes, mais n étant pas un géni du codage, l expérience fera le reste...si je persévère !
    Comme pas grand monde n'a la chance d'être un génie, ouvrir un tuto. ou lire la documentation (ici du module sqlite pour voir comment l'utiliser) est le premier pas pour fabriquer une expérience.

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

  11. #31
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 210
    Par défaut
    c'est bien ce que je fais , mais pas si évident de trouver un tuto "pédagogique" pour débutant !
    des lignes de code dans une console sans expliquer l intérêt de la manoeuvre et non seulement une grossière erreur mais ça ne motive pas, je forme moi aussi dans d autres domaine et je connais bien le sujet. savoir faire et savoir apprendre ne vont pas de pair !....Mais c'est un autre sujet !
    merci de votre aide

  12. #32
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 324
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 324
    Par défaut
    Citation Envoyé par bilcosby Voir le message
    des lignes de code dans une console sans expliquer l intérêt de la manoeuvre et non seulement une grossière erreur
    ok, donc si je comprend enfin ton code , ce n'est pas un début d'application mais un mini test d'une chose.
    OK c'est très bien
    Mais, il faut comprendre quelle chose tu testes/apprends ici ... tk ou sqlite ? J'ai un énorme doute

    Puisque ici, tu ne maitrises pas les 2, ton code devient une usine à gaz pour si peu et du coup, tu fais juste un petit truc extrêmement confus.

    Puisque tu parles de php:
    c'est comme si pour apprendre à insérer un enregistrement dans une BD en php tu écrivais dans le même code 10 fois plus de lignes qui ne sont que pour avoir une belle sortie html. Et puisque tu ne connais pas trop l'html et css, toute cette partie n'a pas d'intérêt au final et est même contre-productive (pour ton apprentissage)

  13. #33
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 768
    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 768
    Par défaut
    Citation Envoyé par bilcosby Voir le message
    c'est bien ce que je fais , mais pas si évident de trouver un tuto "pédagogique" pour débutant !
    Ce n'est pas ce qui manque ici (ou sur Internet)!
    La notion de "pédagogique" étant assez relative à vos attentes personnelles, vous avez 2 options: chercher ou vous faire violence pour en suivre un reconnu comme assez bon (comme le Swinnen).

    Ceci dit, tant que vous n'avez pas accroché un tuto pour qu'il vous motive à essayer (et réussir) de faire les exercices, vous n'aurez pas assez pratiqué (ni accumulé assez d'exemples) pour vous lancer dans des projets perso.

    A vous de voir mais, ce n'est qu'après une 20aines d'échanges que vous vous êtes résolu à poster le code original et constater (pour ceux qui ont eu le courage de le lire) qu'il ne correspondait pas à l'extrait de code initialement posté...

    Le fait est qu'il faut savoir un minimum programmer (et maîtriser les bibliothèques utilisées) pour décrire un problème avec suffisamment d'informations pour permettre de comprendre/reproduire.

    Dans le Swinnen, on apprendra que programmer est un exercice de résolution des problèmes. Ce qui veut dire que venir ici pour juste récupérer un code à emporter (la solution) n'aidera pas à comprendre comment l'écrire par vous même (ce qui est résoudre le problème).

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

  14. #34
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 845
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bilcosby Voir le message
    c'est bien ce que je fais , mais pas si évident de trouver un tuto "pédagogique" pour débutant !
    Il y a différentes interprétations possibles de ce qu'est un débutant. Il y a celui qui connait l'algorithmique, la théorie des langages, l'objet et ses possibilités, mais qui a juste un manque dans la syntaxe Python relative à toutes ces notions ; et celui qui débute et en programmation et en Python.
    Sans précisions de ta part, on ne peut que présumer en fonction des codes que tu postes. Et si tu t'attaques à Tk et sqlite, cela implique que tu connaisses déjà les bases et en prog et en Python...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Locking Record
    Par Fr@ncky dans le forum Hibernate
    Réponses: 4
    Dernier message: 24/11/2004, 11h26
  2. Curseur et lock : Les différence & lequel choisir
    Par BilTCD dans le forum Access
    Réponses: 2
    Dernier message: 22/10/2004, 14h03
  3. [CVS] Problème de commit (Could not open lock file)
    Par 1tox dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 19/10/2004, 11h22
  4. [VB.NET] Synchronisation via application.lock
    Par David.V dans le forum ASP.NET
    Réponses: 4
    Dernier message: 15/06/2004, 06h51
  5. Row lock
    Par cassandra dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 09/04/2003, 16h07

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