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 :

Exceptions, sqlite database locked


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Exceptions, sqlite database locked
    Bonjour,

    J'utilise web2py (python 2.5) pour développer une application dans laquelle il arrive que plusieurs utilisateurs essayent d'écrire dans une base de donnée sqlite au même instant, ce qui est appartement impossible avec sqlite (système de verrous).
    J'aimerai donc arriver à attraper une exception que serait levée lorsque plusieurs utilisateurs tentent d'écrire la base en même temps.
    Seulement je n'y arrive pas, et je ne comprend pas pourquoi.

    Voila ce que j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def MyFunc():
        import MySQLdb
     
        try:
              db(db.magasin.client==session.username).update(present='oui')
        except MySQLdb.OperationalError:
              print "Erreur ??! veuillez attendre"
     
        #la structure de la requête sql est particulière mais fonctionne correctement.  
    return dict()
    Selon moi le code devrait imprimer sur l'écran le message d'erreur, mais ce n'est pas le cas. J'ai le programme qui s'arrête avec l'info suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OperationalError: database is locked
    Alors pourquoi je ne catch rien ?

    J'ai donc essayé avec le code suivant pour essayer de voir quel type d'erreur est lancé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def MyFunc():
     
        try:
              db(db.magasin.client==session.username).update(present='oui')
        except Exception, e: 
              print "exception ? ", e
     
        return dict()
    ce qui ma affiché :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exception ?  database is locked
    Quelqu'un pourrai-t'il me donner un coups de pouce ?


    Merci

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Salut,

    si tu utilises SQLite, l'exception levée devrait être celle du module SQLite et non du module MySQLdb.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Effectivement avec sqlite.OperationalError ca parait plus logique.
    J'ai essayé de le faire mais ca ne marche toujours..
    Le problème c'est qu'avec web2py j'utilise sqlite de maniére "implicite" je ne fais jamais d'import sqlite par exemple, je pense que ca doit etre web2py qui le gère ?

    Du coups si je fais sqlite.OperationalError il me dit qu'il ne sais pas ce que c'est. Et si je rajoute un import sqlite avant ca ne fait pas d'erreur, mais je ne peux toujours pas catcher mon exception.

    Tu ne connais pas un moyen de tester si la bdd est en état "locked" ?
    J'arrive rien a trouver de concret la dessus.

  4. #4
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Test en important depuis sqlite3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from sqlite3 import OperationalError

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Ha yes, j'ai l'impression que ça marche avec ton import.
    J'ai bien mon print qui sort dans la console..
    Je regarde plus en détail, et si c'est ok je passerai le sujet en résolu.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur difficile a resoudre [SQLITE DATABASE]
    Par bza88 dans le forum Android
    Réponses: 1
    Dernier message: 19/06/2013, 15h24
  2. Problème avec SQLite : Database locked
    Par albert55 dans le forum Persistance des données
    Réponses: 0
    Dernier message: 19/04/2013, 16h10
  3. [Généralités] WINDEV + SQLITE database is locked
    Par sperchey dans le forum WinDev
    Réponses: 2
    Dernier message: 15/01/2013, 21h00
  4. SQLite, Database Object ou NoTable ?
    Par smarties dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 30/12/2010, 05h16
  5. Database locked - SQLite
    Par kebab dans le forum JDBC
    Réponses: 6
    Dernier message: 30/06/2010, 10h37

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