Python Django框架學習06: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 startapp TestModel
目錄結構如下:
HelloWorld |-- TestModel | |-- __init__.py | |-- admin.py | |-- models.py | |-- tests.py | `-- views.py
我們修改 TestModel/models.py 文件,代碼如下:
HelloWorld/TestModel/models.py: 文件代碼:
HelloWorld
|-- TestModel
| |-- __init__.py
| |-- admin.py
| |-- models.py
| |-- tests.py
| `-- views.py
以上的類名代表了數據庫表名,且繼承了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', # 添加此項 )
說明:'TestModel.apps.TestmodelConfig',這項如果已經有了, '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>")
更多內容,可關注作者的微信公眾號:胖哥真不錯。
智能推薦
Python Django框架學習(一)
本文章只適用于初學者,大神請跳過 簡介: Django是一個開放源代碼的Web應用框架,由Python寫成。采用了MTV的框架模式,即模型M,視圖V和模版T。它最初是被開發來用于管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟件。并于2005年7月在BSD許可證下發布。這套框架是以比利時的吉普賽爵士吉他手Django Reinhardt來命名的。 Django環境準...
Django框架學習 — 3創建模型
ORM框架 O是object,也就類對象的意思,R是relation,翻譯成中文是關系,也就是關系數據庫中數據表的意思,M是mapping,是映射的意思。在ORM框架中,它幫我們把類和數據表進行了一個映射,可以讓我們通過類和類對象就能操作它所對應的表格中的數據。ORM框架還有一個功能,它可以根據我們設計的類自動幫我們生成數據庫中的表格,省去了我們自己建表的過程。 django中內嵌了ORM框架,不...
Django學習06---Model模型(數據庫)
一、model基本介紹 Django 模型是與數據庫相關的, 與數據庫相關的代碼?般寫在models.py 中, Django ?持 sqlite3, MySQL, PostgreSQL等數據庫, 只需要在settings.py中配置即可, 不?更改models.py中的代碼, 豐富的API極?的?便了使?。 二、model具體使用 1、工程創建以及目錄顯示 創建工程: d...
python Django:model、數據模型
1.view編寫技巧 2.model.py編寫技巧 連接數據庫: 首先將你的APP(在這里為Linux)寫在settings文件中,用來繼承模板: 然后修改此文件中的數據庫信息: 修改后運行時報錯: 因為使用的是python3,在連接MySQL時要用pymysql: 運行后又報錯了: 報錯好像是事務隔離級別的問題。 經查詢需要在數據庫信息中添加信息: 這樣就可以了,運行成功。 在上面的host服務...
說說 Python Django 模型的創建流程
模型指的是真實世界對象的明確描述。它包含所需要的數據字段和行為。Django 遵循 DRY Principle : 明確優于隱式 - 行為基于關鍵字參數,并且在某些情況下,基于字段的類型。 包括所有相關領域邏輯 - 模型應該封裝一個“對象”的各個方面,遵循 Martin Fowler 的 Active Record 設計模式,所有可用于理解該模型的信息都應該存儲在該模型中。...
猜你喜歡
說說 Python Django 模型中的字段
Django 模型中最重要且唯一必要的就是數據庫模型字段定義。字段定義在類屬性中,字段取名應避免使用與模型 API 發生沖突的名稱, 比如 clean, save, or delete 等. 模型中每一個字段都是某個 Field 類的實例,比如 CharField、DateField 或 IntegerField 等等。這些字段類可實現以下功能: Field...
Django學習--models(模型)
在當代Web應用中,主觀邏輯經常牽涉到與數據庫的交互。數據庫驅動網站在后臺鏈接數據庫服務器,從中取出數據,然后在Web頁面用漂亮的格式展示數據 01 數據庫查詢的笨方法 1.在視圖中使用原始sql語句進行從數據庫中獲取數據 2.比如我想獲取數據庫test中表login中username字段 表的結構如下: 3.建立數據庫的連接與查詢 在視圖函數中新建name函數進行數據庫的連接 vie...
虛擬機centos配置網絡,固定ip地址
執行 ifconfig,查看網絡是沒有ip地址的 一、首先將虛擬機的網絡配置設置為橋接模式 二、查看虛擬網絡配置 三、進入到系統控制臺中 配置如圖所示:...
中移OneNET 云平臺 >>> 一塊ESP8266 的WiFi 定位之旅
前言 WiFi 定位功能是OneNET 繼基站定位之后最新推出的一項定位服務。(編稿時仍處于灰度測試階段) 然后我有幸參與了WiFi 定位功能的灰度測試,測試成功,在此記錄一下 開始 1)為設備開啟WiFi 定位功能 WiFi 定位功能門戶(編稿時處于半開放狀態,官網不能查詢到,直接點擊下方鏈接進入): https://open.iot.10086.cn/develop/lbs/#/wifi/wi...
NDK29_FFmpeg內存釋放
NDK開發匯總 文章目錄 一 native層內存泄漏 二 內存回收 BaseChannel VideoChannel AudioChannel DNFFmpeg native-lib調用結束,并釋放內存的方法 三 進行回收后效果圖 四 Demo 一 native層內存泄漏 在上一篇文章中,實現了音視頻播放與同步 NDK27_FFmpeg音視頻同步 當退出播放后,native的內存沒有降低,內存產生...