首頁 >後端開發 >Python教學 >Python中的ORM框架Django ORM詳解

Python中的ORM框架Django ORM詳解

王林
王林原創
2023-06-11 09:12:072829瀏覽

Django ORM是Python中經典的ORM框架,它是Django Web框架的一部分,為資料庫操作提供了便利的方式。 ORM全稱為物件關係映射,它可以將關係型資料庫中的表與Python中的類別進行映射,從而簡化了開發過程,提高了開發效率。本文將對Django ORM進行詳細介紹。

I. ORM的基本概念

ORM是一種將物件與關聯式資料庫之間的映射的技術,主要實現了以下三個方面的功能:

  • #資料庫中的表格對應為Python中的類別
  • 資料庫中的欄位對應為Python中的屬性
  • #資料庫中的記錄對應為Python中的實例

ORM的主要優點是可以減少開發人員編寫重複的SQL語句的時間和工作量,並且可以減少由於SQL語句的調整和變更所帶來的錯誤。

II. Django ORM的優點

與其他ORM框架相比,Django ORM擁有以下優點:

  • 簡單易用:Django ORM的API非常簡單,易於掌握和使用。
  • 豐富的API:Django ORM提供了豐富的API來完成常見的資料庫操作,如增刪改查等,同時也支援進階查詢和聚合查詢等操作。
  • 具有良好的擴展性:Django ORM可以與其他第三方庫進行無縫集成,例如Django REST framework、Django-Oscar等。
  • 自動映射:Django ORM支援自動映射,開發者只需要定義資料庫表的結構,就可以自動產生對應的Python類,從而減少開發過程中的重複程式碼量。

III. 如何使用Django ORM

  1. 安裝Django

#首先需要安裝Django,可以使用pip安裝:

pip install Django
  1. 定義模型

在使用Django ORM時,需要先定義模型類,模型類是Python中的一個類,它定義了資料表中的欄位和資料表的其他元數據,如表名、索引等。以下是一個簡單的模型類別定義:

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=50)
    pub_date = models.DateTimeField()

在上述程式碼中,我們使用了Django ORM提供的models模組來定義了一個名為Book的資料表,其中包含了三個欄位:titleauthorpub_datemax_length用於指定字串類型欄位的最大長度,DateTimeField#用於儲存時間類型欄位。

  1. 建立資料庫表

在完成模型類別的定義後,需要透過遷移來產生資料庫表。 Django ORM提供了自動遷移功能,只需執行以下命令即可產生資料表:

python manage.py makemigrations
python manage.py migrate

以上命令建立了Book表,表結構與定義的模型類別對應。

  1. CRUD操作

a. 建立記錄

#透過模型類別可以輕鬆地在資料表中新增新的記錄,在以下程式碼中,我們建立了新的記錄並將其儲存到資料庫中:

from datetime import datetime
book = Book(title='Django ORM Tutorial', author='Terry', pub_date=datetime.now())
book.save()

b. 更新記錄

使用Django ORM更新記錄非常簡單,只需先查詢記錄,然後將其更新並保存即可。以下是一個簡單的更新程式碼範例:

book = Book.objects.get(id=1)
book.title = 'Updated Title'
book.save()

c. 刪除記錄

刪除記錄也非常簡單,只需執行以下程式碼:

book = Book.objects.get(id=1)
book.delete()

d. 查詢記錄

在Django ORM中,可以使用objects物件進行查詢,以下是一個簡單的查詢範例程式碼:

books = Book.objects.all()
for book in books:
    print(book.title, book.author, book.pub_date)

該程式碼將輸出Book表中所有記錄的titleauthorpub_date欄位。

IV. 進階查詢操作

除了基本的CRUD操作外,Django ORM還支援一些進階查詢操作,如連表查詢、查詢條件組合、聚合操作等,以下是一些範例代碼。

a. 連表查詢

Django ORM中支援兩種方式的連表查詢:一種是透過ForeignKey欄位進行關聯,另一種是透過自定義查詢進行關聯。

# 通过ForeignKey字段关联
class Author(models.Model):
    name = models.CharField(max_length=50)

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

books = Book.objects.filter(author__name='Leo Tolstoy')
# 以上代码查询了作者名为'Leo Tolstoy'的所有图书

# 通过自定义查询进行关联
books = Book.objects.raw('SELECT * FROM app_book INNER JOIN app_author ON app_book.author_id = app_author.id WHERE app_author.name = %s', ['Leo Tolstoy'])

b. 查詢條件組合

在Django ORM中,可以使用Q物件將多個查詢條件組合,以實現更複雜的查詢。以下是一個範例程式碼:

from django.db.models import Q

books = Book.objects.filter(Q(title__contains='Django') | Q(author__contains='Guido'))
# 以上代码查询了标题中包含'Django'或作者名中包含'Guido'的所有图书

c. 聚合操作

聚合作業用於對資料進行分組或總計統計。 Django ORM中支援的聚合操作包括:AvgMaxMinCountSum等。以下是一個範例程式碼:

from django.db.models import Avg

avg_pub_date = Book.objects.all().aggregate(Avg('pub_date'))
# 以上代码计算了所有图书的发布时间的平均值

V. 總結

本文對Python中的ORM框架Django ORM進行了詳細介紹。 Django ORM是一個簡單易用、功能豐富、具有良好擴展性的ORM框架,它可以幫助開發人員實現快速開發、更高效率的資料庫操作。除了基本的CRUD操作外,Django ORM還支援一些進階查詢操作,如連表查詢、查詢條件組合、聚合操作等,可滿足更多資料操作的需求。

以上是Python中的ORM框架Django ORM詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn