Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memilih Nilai Pendua dengan Cekap dalam Django Menggunakan ORM dan SQL?

Bagaimana untuk Memilih Nilai Pendua dengan Cekap dalam Django Menggunakan ORM dan SQL?

Susan Sarandon
Lepaskan: 2024-12-29 03:40:11
asal
814 orang telah melayarinya

How to Efficiently Select Duplicate Values in Django Using ORM and SQL?

Memilih Nilai Pendua dalam Django: Penyelesaian ORM dan SQL

Dalam Django, jika anda mempunyai model dengan medan bukan unik yang mungkin mempunyai nilai pendua, anda mungkin perlu mendapatkan semula semua baris dengan sekurang-kurangnya satu nilai pendua. Ini boleh dicapai menggunakan ORM Django dan SQL mentah.

Penyelesaian Django ORM:

Untuk memilih baris dengan nilai medan pendua menggunakan ORM Django, anda boleh menggunakan pendekatan berikut:

from django.db.models import Count

dupes = Literal.objects.values('name')
                   .annotate(Count('id'))
                   .order_by()
                   .filter(id__count__gt=1)
Salin selepas log masuk

Ini akan mengembalikan ValuesQuerySet yang mengandungi hanya medan nama dan kiraan medan id. Untuk mendapatkan QuerySet biasa, anda boleh menggunakan ini sebagai subquery:

Literal.objects.filter(name__in=[item['name'] for item in dupes])
Salin selepas log masuk

SQL Solution:

Sebagai alternatif kepada penyelesaian Django ORM, anda juga boleh gunakan SQL mentah seperti ini:

SELECT * FROM literal WHERE name IN (
    SELECT name FROM literal GROUP BY name HAVING COUNT((name)) > 1
);
Salin selepas log masuk

Perbandingan dan Prestasi Pertimbangan:

Penyelesaian ORM Django biasanya lebih disukai kerana ia lebih ringkas dan boleh memanfaatkan ciri pengoptimuman Django. Walau bagaimanapun, untuk pertanyaan kompleks atau set data yang besar, penyelesaian SQL mentah mungkin menawarkan prestasi yang lebih baik.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Nilai Pendua dengan Cekap dalam Django Menggunakan ORM dan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan