2016-10-25 1 views
0

J'essaie de créer des scripts d'autotest en utilisant Kenneth Reitz's records library. J'ai besoin de vérifier la base de données MySQL pour les mises à jour ici et là. Cependant, j'ai rencontré que parfois des requêtes simples retournent un jeu de données vide, en ignorant les mises à jour dans les tables. Je pourrais totalement voir les mises à jour dans les clients GUI ou même en utilisant des enregistrements dans la console python alternative. J'ai trouvé que les enregistrements utilisent SQLAlchemy avec le niveau d'isolement par défaut "REPEATABLE READ". Les lectures répétables ignorent toutes les mises à jour jusqu'à la fin de la transaction, je n'ai donc pas pu les voir.Modifier le niveau d'isolement dans une requête d'enregistrements ou de fermer une transaction

Y a-t-il un moyen de changer cela? J'ai probablement besoin de fermer une transaction et en ouvrir une nouvelle, ou peut-être changer le niveau d'isolation pour cette connexion, mais comment puis-je le faire?

+0

je ne pouvais toujours pas trouver un moyen de modifier ce paramètre sans laisser tomber la bibliothèque de dossiers et de passer à SQLAlchemy. Cependant, j'ai trouvé une solution de contournement. Si vous appelez 'db.query ('SET AUTOCOMMIT = 1')', les requêtes suivantes seront validées dès qu'elles seront appelées, ce qui vous permettra de vérifier votre base de données sans la mettre en cache. – Ariksu

Répondre

0

Maintenant, je peux répondre à ma question.

Avec la sortie des enregistrements 0.5.0 (Novemmber 2016), il est maintenant possible de passer des arguments à conduire SQLAlchemy. Il n'y avait pas une telle possibilité dans 0.4.3 que j'ai utilisée.

Ainsi, pour mettre en place le niveau d'isolement sur la connexion que nous devrions utiliser

db_url_mysql = 'mysql://user:[email protected]:3306/DB' 
db = records.Database(db_url_mysql,isolation_level="READ_UNCOMMITTED")