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

  • BMG Rentals Property Management

    BMG Rentals

    23 Mayıs 2011
  • HouseholdHacker

    HouseholdHac

    6 Kasım 2007
  • sghaff1

    sghaff1

    23 Mart 2009