2011-01-12 7 views
4

je dois upadte, ajouter et supprimer des lignes de la table auth.models.User, malheureusement ...tables de verrouillage transactions Django

quand je le fais les verrous de table et je ne peux pas effectuer des requêtes SELECT sur la table .


Je suis autour de ces questions par @transaction.commit_manually, ce qui pourrait avoir quelque chose à voir avec les tables de verrouillage.

La transaction se présenter comme suit:

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() 

Aussi j'utilise Sql Server 2008, je voudrais savoir s'il est Sql Server actions spécifiques ou telles bloquerait la table dans PostgreSQL et MySQL aussi.


Les idées les gars? :)

Répondre

2

Oui, vous verrouillez les tables volontairement. Je suggère d'étudier transaction isolation parce que c'est l'un des concepts de base des bases de données.

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

  • Vous pourriez SET the transaction isolation level à quelque chose plus faible pour le reste de la connexion de base de données. Vous pouvez également faire la même chose avec other mechanisms.
  • Vous pouvez essayer de réorganiser vos requêtes de sorte que vous lisez d'abord les données de base et après que vous commenciez à modifier les données. Cela peut vous permettre de verrouiller la table mais permettre à l'opération de continuer.
  • Vous pourriez envisager à nouveau quelles requêtes sont importantes à traiter transactionnellement.
  • Vous pouvez également guider le serveur SQL avec Locking Hints.
Questions connexes