Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Amalan terbaik untuk ORM dalam rangka kerja Django

Amalan terbaik untuk ORM dalam rangka kerja Django

WBOY
WBOYasal
2023-06-17 12:57:19852semak imbas

Django ialah rangka kerja web Python yang popular, dan lapisan ORM (Object Relational Mapping) adalah salah satu ciri terasnya. ORM menyediakan pembangun cara yang lebih mudah untuk mengendalikan interaksi dengan pangkalan data dalam aplikasi web. Oleh kerana fungsinya yang berkuasa, ORM menjadi semakin popular di kalangan pembangun. Walau bagaimanapun, kerumitan ORM juga boleh menyebabkan pilihan reka bentuk dan isu prestasi yang lemah. Untuk mengelakkan masalah ini, artikel ini akan memperkenalkan amalan terbaik Django ORM.

  1. Gunakan QuerySet untuk memudahkan pertanyaan data

Set pertanyaan dalam Django ORM menyediakan kaedah pertanyaan yang sangat berkuasa. Set pertanyaan hendaklah sentiasa digunakan apabila anda perlu menanyakan data dalam pangkalan data. Ia adalah salah satu konsep utama dalam ORM Konsep ini mewakili satu siri objek yang diambil daripada pangkalan data. Set pertanyaan boleh menggunakan panggilan berantai, menjadikannya mudah untuk menggabungkan berbilang penapis dalam kod. Menggunakan set pertanyaan, anda tidak perlu risau tentang menulis pernyataan pertanyaan SQL secara manual, dan ia sangat mudah.

Berikut ialah contoh set pertanyaan:

books = Book.objects.filter(author__name='Jane Doe').exclude(published_at__year=2020).order_by('title')

Kod di atas digunakan untuk menanya buku yang pengarangnya bernama 'Jane Doe' dan bukan diterbitkan pada 2020 , disusun mengikut abjad mengikut tajuk.

2. Minimumkan bilangan set pertanyaan

Setiap permintaan kepada pangkalan data dikenakan overhed. Oleh itu, bilangan permintaan kepada pangkalan data harus diminimumkan.

Apabila anda perlu menanyakan berbilang set pertanyaan, anda boleh menggunakan prefetch_related dan select_related untuk mengoptimumkan set pertanyaan.

3. Gunakan sifat atau kaedah dalam model untuk melakukan pengiraan

Satu kelebihan rangka kerja ORM ialah ia menukar semua operasi pangkalan data kepada operasi objek. Menggunakan pendekatan ini boleh memudahkan kod dan mengurangkan beban kerja pembangun. Kita boleh melaksanakan sifat atau kaedah pada objek model untuk mendapatkan hasil yang kita perlukan.

Sebagai contoh, jika anda perlu menambah kaedah untuk mengira bilangan halaman dalam model Buku:

class Book(models.Model):
    ...
    def get_num_pages(self):
        return self.word_count / self.words_per_page

Dengan cara ini, kita boleh memanggil fungsi get_num_pages() dan tidak perlu untuk mengira bilangan halaman secara manual. Ini lebih pantas daripada menanyakan nilai daripada pangkalan data.

4. Gunakan indeks untuk meningkatkan prestasi

Indeks ialah alat yang berkuasa untuk mengoptimumkan prestasi pertanyaan. Menambah indeks pada model boleh mempercepatkan pertanyaan. Indeks boleh menjadi indeks lajur tunggal atau indeks kompaun Ia boleh mengutamakan lajur data yang kerap diakses yang sering digunakan dalam OrderBy, Where dan Join untuk mencapai tujuan pengoptimuman. Penubuhan indeks akan meningkatkan kos penyelenggaraan meja, dan kos penyelenggaraan jangka panjang harus dipertimbangkan.

Sebagai contoh, jika anda perlu menanyakan lajur tertentu model (seperti tajuk buku), anda boleh menambah perintah_dengan_menghormati_kenyataan dalam kelas Meta model, contohnya:

class Book(models.Model):
    title = models.CharField(max_length=255)
    author = models.ForeignKey('Author', on_delete=models.CASCADE)

    class Meta:
        ordering = ('title',)
        indexes = [
            models.Index(fields=['title', 'author'], name='book_title_author_idx')
        ]

Kod di atas dilaksanakan mengikut tajuk dan atribut pengarang diisih, dan indeks ditambahkan pada gabungan ini.

5. Beri perhatian kepada prestasi operasi pangkalan data

Apabila menggunakan ORM, kita harus cuba mengurangkan bilangan akses kepada pangkalan data untuk meningkatkan prestasi aplikasi. Berikut ialah beberapa cara untuk mengurangkan akses kepada pangkalan data:

a. 通过对数据的预加载和缓存来减少查询

b. 避免在循环中进行多次查询

c. 如果使用的是 PostgreSQL 数据库,在 signals 中加载计算后的数据,可以避免查询重复

Ringkasan:

Artikel ini menyenaraikan beberapa petua amalan terbaik dalam Django ORM. Dengan mengikuti petua ini dengan teliti, pembangun boleh mengelakkan kesilapan biasa dan anti-corak apabila menggunakan ORM. Apabila mengoptimumkan ORM anda untuk prestasi dan kelajuan dengan pengesyoran ini, pertukaran dan ujian diperlukan untuk mengelakkan pengoptimuman yang salah. Dengan reka bentuk ORM yang betul, prestasi aplikasi dan kebolehpercayaan boleh dipertingkatkan dengan ketara.

Atas ialah kandungan terperinci Amalan terbaik untuk ORM dalam rangka kerja Django. 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