Tables de locking des transactions Django

J'ai besoin d'upadte, append et supprimer des lignes de la table auth.models.User, malheureusement …

quand je le fais, la table se verrouille et je ne peux pas effectuer de requêtes SELECT sur la table.


J'entoure ces requêtes par @transaction.commit_manually , ce qui pourrait avoir quelque chose à voir avec le locking des tables.

La transaction ressemble à ceci:

 for row in csv_reader: update_sql = "UPDATE auth_user SET last_name = '%s' WHERE username = '%s'" %(row[2], row[0] ) cursor.execute(update_sql) if not index % 100: print index: print index transaction.commit() 

J'utilise aussi Sql Server 2008 , je voudrais savoir si c'est spécifique à Sql Server ou si de telles actions verrouilleraient aussi la table dans PostgreSQL et MySQL.


Des idées les gars? 🙂

Oui, vous verrouillez les tables express. Je proposerais d'étudier l' isolation des transactions car c'est l'un des concepts keys des bases de données.

En ce qui concerne votre problème, vous pouvez faire plusieurs choses, à la fois pour les instructions UPDATE et SELECT:

  • Vous pouvez définir le niveau d'isolation de la transaction à un niveau inférieur pour le rest de la connection à la database.
  • Vous pourriez probablement faire la même chose avec d' autres mécanismes .
  • Vous pouvez essayer de réorganiser vos requêtes de sorte que vous lisez d'abord datatables de base et après que commencer à modifier datatables. Cela peut vous permettre de verrouiller la table mais permettre à l'opération de continuer.
  • Vous pouvez réexaminer les requêtes qui doivent être traitées de manière transactionnelle.
  • Vous pouvez également guider le server SQL avec des astuces de locking .