1. 程式人生 > 程式設計 >Django 框架模型操作入門教程

Django 框架模型操作入門教程

本文例項講述了Django 框架模型操作。分享給大家供大家參考,具體如下:

Django 對各種資料庫提供了很好的支援,包括:PostgreSQL、MySQL、SQLite、Oracle。

Django 為這些資料庫提供了統一的呼叫API。 我們可以根據自己業務需求選擇不同的資料庫。

MySQL 是 Web 應用中最常用的資料庫。本章以mysql為例。

如果沒安裝 mysql 驅動,可以執行以下命令安裝:

sudo pip3 install mysqlclient

資料庫配置

在專案的 settings.py 檔案中找到 DATABASES 配置項,將其資訊修改為:

djangoPro/djangoPro/settings.py: 檔案程式碼:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',# 或者使用 mysql.connector.django
'NAME': 'test',#使用的資料庫
'USER': 'test',#使用者名稱
'PASSWORD': 'test123',#密碼 沒有可以為空
'HOST':'localhost','PORT':'3306',}
}

這裡添加了中文註釋,所以需要在 HelloWorld/settings.py 檔案頭部新增 # -*- coding: UTF-8 -*-。

上面包含資料庫名稱和使用者的資訊,它們與 MySQL 中對應資料庫和使用者的設定相同。Django 根據這一設定,與 MySQL 中相應的資料庫和使用者連線起來。

定義模型

建立 APP

Django規定,如果要使用模型,必須要建立一個app。我們使用以下命令建立一個 TestModel 的 app:

django-admin startapp TestModel

目錄結構如下:

djangoPro
|-- TestModel
| |-- __init__.py
| |-- admin.py
| |-- models.py
| |-- tests.py
| `-- views.py

修改 TestModel/models.py 檔案,程式碼如下:

# models.py
from django.db import models
class Test(models.Model):
  name = models.CharField(max_length=20)

以上的類名代表了資料庫表名,且繼承了models.Model,類裡面的欄位代表資料表中的欄位(name),資料型別則由CharField(相當於varchar)、DateField(相當於datetime), max_length 引數限定長度。

接下來在settings.py中找到INSTALLED_APPS這一項,如下:

INSTALLED_APPS = (
  'django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','TestModel',# 新增此項
)

在命令列中執行:

$ python3 manage.py migrate  # 建立表結構
$ python3 manage.py makemigrations TestModel # 讓 Django 知道我們在我們的模型有一些變更
$ python3 manage.py migrate TestModel  # 建立表結構

表名組成結構為:應用名_類名(如:TestModel_test)。

注意:儘管我們沒有在models給表設定主鍵,但是Django會自動新增一個id作為主鍵。

資料庫操作

接下來我們在 HelloWorld 目錄中新增 testdb.py 檔案(下面介紹),並修改 urls.py:

from django.conf.urls import *
from . import view,testdb
urlpatterns = [
url(r'^hello$',view.hello),url(r'^testdb$',testdb.testdb),]

新增資料

新增資料需要先建立物件,然後再執行 save 函式,相當於SQL中的INSERT:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 資料庫操作
def testdb(request):
  test1 = Test(name='runoob')
  test1.save()
  return HttpResponse("<p>資料新增成功!</p>")

獲取資料

Django提供了多種方式來獲取資料庫的內容,如下程式碼所示:

djangopro/djangoPro/testdb.py: 檔案程式碼:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 資料庫操作
def testdb(request):
# 初始化
response = ""
response1 = ""
# 通過objects這個模型管理器的all()獲得所有資料行,相當於SQL中的SELECT * FROM
list = Test.objects.all()
# filter相當於SQL中的WHERE,可設定條件過濾結果
response2 = Test.objects.filter(id=1)
# 獲取單個物件
response3 = Test.objects.get(id=1)
# 限制返回的資料 相當於 SQL 中的 OFFSET 0 LIMIT 2;
Test.objects.order_by('name')[0:2]
#資料排序
Test.objects.order_by("id")
# 上面的方法可以連鎖使用
Test.objects.filter(name="runoob").order_by("id")
# 輸出所有資料
for var in list:
response1 += var.name + " "
response = response1
return HttpResponse("<p>" + response + "</p>")

更新資料

修改資料可以使用 save() 或 update():

djangopro/djangoPro/testdb.py: 檔案程式碼:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 資料庫操作
def testdb(request):
# 修改其中一個id=1的name欄位,再save,相當於SQL中的UPDATE
test1 = Test.objects.get(id=1)
test1.name = 'Google'
test1.save()
# 另外一種方式
#Test.objects.filter(id=1).update(name='Google')
# 修改所有的列
# Test.objects.all().update(name='Google')
return HttpResponse("<p>修改成功</p>")

刪除資料

刪除資料庫中的物件只需呼叫該物件的delete()方法即可:

djangopro/djangoPro/testdb.py: 檔案程式碼:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 資料庫操作
def testdb(request):
# 刪除id=1的資料
test1 = Test.objects.get(id=1)
test1.delete()
# 另外一種方式
# Test.objects.filter(id=1).delete()
# 刪除所有資料
# Test.objects.all().delete()
return HttpResponse("<p>刪除成功</p>")

希望本文所述對大家基於Django框架的Python程式設計有所幫助。