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

  • Jack Vale Films

    Jack Vale Fi

    8 ŞUBAT 2007
  • Santozz Yazz

    Santozz Yazz

    23 Mart 2014
  • theKGB65

    theKGB65

    24 Aralık 2007