Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment effectuer des verrous de table/ligne dans Django

Django ne fournit pas explicitement d'API pour effectuer le verrouillage des tables. D'après mon expérience, un code bien conçu a rarement besoin de verrouiller une table entière, et la plupart des problèmes de concurrence peuvent être résolus avec un verrouillage au niveau des lignes. C'est un ultime effort :il ne résout pas la concurrence, il tue simplement toute tentative de concurrence.

Si vous avez vraiment besoin d'un verrouillage au niveau de la table, vous pouvez utiliser un curseur et exécuter des instructions SQL brutes :

from django.db import connection

with connection.cursor() as cursor:
    cursor.execute("LOCK TABLES %s READ", [tablename])
    try:
        ...
    finally:
        cursor.execute("UNLOCK TABLES;")