Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencari Baris dengan Nilai Medan Pendua Menggunakan Django ORM?

Bagaimana untuk Mencari Baris dengan Nilai Medan Pendua Menggunakan Django ORM?

Linda Hamilton
Linda Hamiltonasal
2025-01-05 08:42:41784semak imbas

How to Find Rows with Duplicate Field Values Using Django ORM?

Pertanyaan Django untuk Baris dengan Nilai Medan Pendua

Andaikan kita mempunyai model Django dengan medan bukan unik. Kita perlu memilih semua baris daripada model yang mempunyai sekurang-kurangnya satu nilai pendua untuk medan itu.

Pendekatan SQL Biasa

Satu penyelesaian yang mungkin adalah menggunakan SQL biasa:

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

Django ORM Pendekatan

Menggunakan ORM Django, kita boleh mencapai hasil yang sama dengan gabungan nilai(), anotasi(), order_by(), dan penapis():

from django.db.models import Count

dupes = Literal.objects.values('name') \
                    .annotate(Count('id')) \
                    .order_by() \
                    .filter(id__count__gt=1)

Memandangkan kod di atas mengembalikan ValuesQuerySet, kita perlu menukarnya kepada QuerySet biasa untuk menggunakannya sebagai penapis:

duplicates = Literal.objects.filter(name__in=[item['name'] for item in dupes])

Pendekatan ini memastikan bahawa kami hanya memilih baris dengan nilai nama pendua.

Atas ialah kandungan terperinci Bagaimana untuk Mencari Baris dengan Nilai Medan Pendua Menggunakan Django ORM?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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