Quando si utilizza una transazione di database per raggruppare più aggiornamenti, dovrei includere anche SELECT all'interno della transazione? Ad esempio, consente di dire che:Devo includere SELECT in una transazione?
- ottenere un record
- controllo delle autorizzazioni di modifica per il record, utilizzando i dati dal record
- aggiornamento alcuni record
- aggiornamento alcuni altri record
Devo iniziare la transazione prima della fase "ottieni un record" o solo attorno agli aggiornamenti?
Sto utilizzando Postgres/Django transaction.atomic()
ma non credo che importi qui.
Una nota per gli utenti di Django: 'SELECT ... PER UPDATE' è disponibile tramite Django's select_for_update' (https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.select_for_update) –
@ScottStafford ... ma sfortunatamente 'SELECT ... FOR SHARE', o PostgreSQL 'SELECT ... FOR KEY SHARE' /' FOR KEY UPDATE'. –
Quindi, per assicurarmi di seguire l'angolo di Django, una chiamata come "MyObject.objects.get (pk = 5)' non bloccherà nulla se all'interno di un 'transaction.atomic()' o no. Per fare questo ho bisogno di essere entrambi all'interno di un 'transaction.atomic()' E usare un modulo come 'MyObject.objects.select_for_update(). Get (pk = 5)', per assicurarmi che MyObject 5 non possa essere cambiato fino a dopo la mia transazione finisce. –