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