1. 程式人生 > >Django ORM框架的使用

Django ORM框架的使用

ORM是物件關係對映(Object Relational Mapping)的縮寫,由於程式設計者更多采用面向物件的思想,而資料庫則以關係作為其基礎,ORM的作用使得我們可以採用面向物件的思路來設計資料庫,使資料庫設計更加簡單。Django ORM框架存在很多細節的問題,本文主要幫助大家瞭解其使用方法,更多的內容在需要時可以從官方文件或者網上進行選擇性學習。

Django中直接提供了ORM框架,幫助開發者進行資料庫開發。使用Django的ORM框架也十分簡單。開啟專案的settings.py檔案,其中有一條配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

這就是ORM的配置項。Django預設使用sqlite3作為專案的資料庫,我們可以修改配置,常用的MySQL和Oracle都是支援的,只需要修改ENGINE配置項為:

MySQL:django.db.backends.mysql

Oracle:'django.db.backends.oracle'

NAME是資料庫檔案的路徑,需要按照不同的資料庫進行配置。

另外,還有USER,PASSWORD和HOST等配置項,可以用來配置資料庫的使用者名稱,密碼和主機位置。我們學習和開發時,基於sqlite3即可,更加方便。

接下來,再瞭解兩個命令,這兩個命令在之前的文章已經出現過,一個是:

>>> python manage.py migrate

該命令用來應用尚未被應用的資料庫的變動,比如表的建立和修改。另一個命令是:

>>> python manage.py makemigrations

該命令會改變資料庫的變動但並不會被應用,如果希望應用改變,需要執行migrate命令。如果不明白,可以開啟login應用的migrations目錄看一下,如果執行過makemigrations,會在該目錄下生成一些.py檔案,這些檔案將會操作資料庫,而執行migrate,就是將這些操作中未進行的進行操作。

下面我們開始嘗試使用一下,開啟login目錄,找到models.py檔案,輸入一下內容:

from django.db import models


from django.db import models


class Person(models.Model):
    name = models.CharField(max_length=300)
    age = models.IntegerField()

    def __str__(self):
        return 'name: %s age: %s' \
               % (self.name, self.age)

定義了一個Person類,派生自models.Models類,該類是Django實體類的基類,然後這個類有兩個欄位,一個是字串型別的name欄位,一個是整型的age欄位,__str__是為了在我們操作實體類時,能夠檢視資訊。這樣,實體類就建立完成了。依次執行下面兩條命令,注意,對app的資料庫變動,要在命令後加入app的名稱:

>>> python manage.py makemigrations login

>>> python manage.py migrate login

之後,Django會在資料庫中建立一個名稱為app名稱_實體類名稱的表,上面的例子,就是login_person,不過,我們沒必要太關心這個,我們可以通過實體類操作資料庫了,輸入以下命令:

>>> python manage.py shell

這樣會啟動一個Python的終端,這個終端已經幫我們載入了Django的相關環境,不再需要我們手動配置。輸入命令引入Person實體類:

>>> from login.models import Person

然後執行

>>> p = Person(name='Tom', age=2)

>>> p.save()

這樣我們就在資料庫建立了一條資料,檢視一下:

>>> Person.objects.all()

<QuerySet [<Person: name: Tom age: 12>]>

QuerySet是我們查詢後的資料集,其中有一條資料。查詢試試:

>>> Person.objects.filter(name='Tom')

<QuerySet [<Person: name: Tom age: 12>]>

>>> Person.objects.filter(name__contains='om')

<QuerySet [<Person: name: Tom age: 12>]>

注意一下第二條,我們可以使用兩個下劃線之後新增條件的方式進行條件檢索,這裡是欄位內容包含om,其他可用的條件很多,可檢視一下文件。資料庫的增和查嘗試過了,再看下改:

>>> p = Person.objects.all()[0]
>>> p.age = 16
>>> p.save()
>>> Person.objects.all()[0]
<Person: name: Tom age: 16>

最後是刪除一條記錄:

>>> Person.objects.get(pk=1).delete()
(1, {'login.Person': 1})
>>> Person.objects.all()
<QuerySet []>

稍微注意一下第一行,我們使用get通過主鍵取得一條記錄,Django為我們的實體類預設生成了一個主鍵。

以上就是Django ORM框架的配置和基本使用,使用Django的ORM框架,還可以生成一對一,一對多,多對一和多對多的關係,需要的時候可以檢視一些資料,使用也是很簡單的。