2010-07-27 17 views
6

Bir sorgu tarafından kaç satırın silindiğini kontrol etmek mümkün mü?Kaç satır silindi?

queryset = MyModel.object.filter(foo=bar) 
queryset.delete() 
deleted = ... 

Veya bunun için işlemleri kullanmalı mıyım?

@transaction.commit_on_success 
def delete_some_rows(): 
    queryset = MyModel.object.filter(foo=bar) 
    deleted = queryset.count() 
    queryset.delete() 

PHP + MySQL örnek: queryset.count() veya queryset.distinct().count() yeterli değildir neden

mysql_query('DELETE FROM mytable WHERE id < 10'); 
printf("Records deleted: %d\n", mysql_affected_rows()); 
+0

Hmm, well 'queryset.delete()' 'len (queryset) nesne sayısını silmeli, ancak MySQL'den etkilenen satır sayısını almak için [MySQLdb] kullanmalısınız (http: // mysql-python .sourceforge.net/MySQLdb.html) doğrudan sürücüyü düşünüyorum. –

cevap

0

anlamıyorum.

+2

Bu yeterli, ancak daha fazla sorgu üretiyor. PHP + MySQL örneği sadece DBMS'ye singe talebi. Ayrıca IMO PHP kodu daha açık. Performans sorunum veya bir şeyim yok, bu yüzden tek bir sorguda yapmalıyım. Ben sadece merak ediyorum. –

+2

Ayrıca, 'MySQLdb' imlecinin 'rowcount' özniteliğine de erişebilirsiniz, ancak hack-ish:' base_cursor = connection.cursor() .bursor' (veya 'base_cursor = connection.cursor(). "DEBUG", "True" olarak ayarlanmışsa imleci '). –

+1

Django'da kullandığınız ORM'nin sizin o anki uygulamanızın veritabanı agnostik olmasına izin veren bir veritabanı ve daha sonra bir veritabanı katmanı olduğunu anlamanız gerekir, ancak PHP sürücünüzde olduğu gibi temel veritabanıyla iletişim kurmak için veritabanı sürücüsünü kullanabilirsiniz. Ancak uygulama veritabanınızı bağımlı hale getirebilirsiniz. –

2

Eğer kaç satır silindi şekline göre bir şey yaparsanız, örneğin silinen kaç satır bilmek isteyen birçok durum vardır. Bir COUNT işlemi gerçekleştirerek kontrol etmek ekstra veritabanı yükü oluşturur ve atomik değildir.

queryset.delete() yöntem hemen nesneyi siler ve silinmiş nesnelerin sayısı ve nesne türü için silme sayısı ile bir sözlük döndürür. Daha fazla bilgi için belgelere göz atın:

0

Gerçek satırlar, SELECT row_count() ile görüntüleyebileceğiniz etkilenen. Tüm qs.count() ve cursor.rowcount ait İlk aynı şeyler değil!

MySQL ile InnoDB ile REPEATABLE READ (varsayılan mod) READ sorguları ve WRITE sorguları görünümü !! FARKLI !!! querysets! onlar READ COMMITTED modda çalışır gibi YAZIN sorgular, gerçek taahhüt verileri görüntülemek ederken

OKU sorgular, eski anlık okunan.