J'ai un programme Python qui utilise le module "threading". Toutes les secondes, mon programme démarre un nouveau thread qui récupère des données sur le web et les stocke sur mon disque dur. J'aimerais utiliser sqlite3 pour stocker ces résultats, mais je n'arrive pas à le faire fonctionner. Le problème semble se situer au niveau de la ligne suivante :
conn = sqlite3.connect("mydatabase.db")
- Si je place cette ligne de code dans chaque thread, j'obtiens une OperationalError m'indiquant que le fichier de la base de données est verrouillé. Je suppose que cela signifie qu'un autre thread a ouvert mydatabase.db via une connexion sqlite3 et l'a verrouillé.
- Si je place cette ligne de code dans le programme principal et que je passe l'objet de connexion (conn) à chaque thread, j'obtiens une erreur de programmation (ProgrammingError), indiquant que les objets SQLite créés dans un thread ne peuvent être utilisés que dans ce même thread.
Auparavant, je stockais tous mes résultats dans des fichiers CSV et je ne rencontrais aucun de ces problèmes de verrouillage de fichiers. J'espère que cela sera possible avec sqlite. Des idées ?
5 votes
J'aimerais noter que les versions plus récentes de Python incluent des versions plus récentes de sqlite3 qui devraient corriger ce problème.
0 votes
@RyanFugger savez-vous quelle est la version la plus ancienne qui supporte cela ? J'utilise la version 2.7
0 votes
@RyanFugger AFAIK il n'y a pas de version préconstruite qui contient une version plus récente de SQLite3 qui a corrigé cela. Vous pouvez cependant en construire une vous-même.