SORU
26 Kasım 2008, ÇARŞAMBA


Nasıl veritabanı girdileri eşzamanlı değişikliklere karşı koruyabilirim Django:

Varsa bir yolu iki veya daha fazla kullanıcı tarafından aynı veri tabanına giriş eşzamanlı değişikliklere karşı korumak için mi?

Kullanıcı ikinci commit/kaydetme işlemi gerçekleştirmek için bir hata iletisi göstermek için kabul edilebilir olacak, ama veri sessizce yazılmasını değil.

Bir kullanıcı "Geri" düğmesini ya da sadece kendi tarayıcısı, sonsuza dek kilit bırakarak kapatın. kullanılması gibi giriş kilitleme bir seçenek değil bence

CEVAP
30 Ocak 2010, CUMARTESİ


Bu Django kilitleme: iyimser şekilde yapıyorum

updated = Entry.objects.filter(Q(id=e.id) && Q(version=e.version))\
          .update(updated_field=new_value, version=e.version 1)
if not updated:
    raise ConcurrentModificationException()

Yukarıdaki kod Custom Manager bir yöntem olarak uygulanabilir.

Aşağıdaki varsayımlar yapıyorum:

  • () filtre.() güncelleştirme tek bir veritabanı filtre tembel olduğu için . sorgu neden olur
  • bir veritabanı sorgusu atom

Bu varsayımlar kimse önce giriş güncelleştirilmiş olduğundan emin olmak için yeterli. Eğer birden çok satır bu şekilde güncellendi, hareketleri kullanmanız gerekir.

UYARIDjango Doc:

Güncellemeyi unutmayın() yöntemi doğrudan bir SQL dönüştürülür açıklama. Toplu bir operasyondur doğrudan günceller. Herhangi bir çalışma yok () Kaydet modelleri, yöntemleri, ya da yayan pre_save veya post_save sinyaller

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • backyardjay

    backyardjay

    8 ŞUBAT 2009
  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • finalcall07

    finalcall07

    11 NİSAN 2008