django基於models.py對資料的“增刪改查”
Django 模型
Django 對各種資料庫提供了很好的支援,包括:PostgreSQL、MySQL、SQLite、Oracle。
Django 為這些資料庫提供了統一的呼叫API。我們可以根據自己業務需求選擇不同的資料庫。
MySQL 是 Web 應用中最常用的資料庫。本章節我們將以 Mysql 作為例項進行介紹。你可以通過本站的 MySQL 教程 瞭解更多Mysql的基礎知識。
如果你沒安裝 mysql 驅動,可以執行以下命令安裝:
sudo pip install mysqlclient
資料庫配置
我們在專案的 settings.py 檔案中找到 DATABASES 配置項,將其資訊修改為:
HelloWorld/HelloWorld/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.py startapp TestModel
目錄結構如下:
HelloWorld|--TestModel||-- __init__.py ||-- admin.py ||-- models.py ||-- tests.py |`-- views.py
我們修改 TestModel/models.py 檔案,程式碼如下:
HelloWorld/TestModel/models.py: 檔案程式碼:
# models.pyfromdjango.dbimport以上的類名代表了資料庫表名,且繼承了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',# 新增此項)
在命令列中執行:
$ python manage.py migrate # 建立表結構 $ python manage.py makemigrations TestModel# 讓 Django 知道我們在我們的模型有一些變更 $ python manage.py migrate TestModel# 建立表結構
看到幾行 "Creating table…" 的字樣,你的資料表就建立好了。
Creating tables ...……Creating table TestModel_test#我們自定義的表……
表名組成結構為:應用名_類名(如:TestModel_test)。
注意:儘管我們沒有在models給表設定主鍵,但是Django會自動新增一個id作為主鍵。
資料庫操作
接下來我們在 HelloWorld 目錄中新增 testdb.py 檔案(下面介紹),並修改 urls.py:
HelloWorld/HelloWorld/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:
HelloWorld/HelloWorld/testdb.py: 檔案程式碼:
# -*- 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>")
訪問 http://127.0.0.1:8000/testdb 就可以看到資料新增成功的提示。
輸出結果如下:
獲取資料
Django提供了多種方式來獲取資料庫的內容,如下程式碼所示:
HelloWorld/HelloWorld/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():
HelloWorld/HelloWorld/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()方法即可:
HelloWorld/HelloWorld/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>")
出處:http://www.runoob.com/django/django-model.html