django系列五:資料庫配置
前言
數據的持久化幾乎是每個系統都將面臨的,所以數據的存儲也是多樣化的。該系列中應用的資料庫是mongodb。但是該系列不對mongodb做詳細的介紹。在程序中應用到的是這套orm框架mongoengine。選擇其它資料庫請參照官網setting。
資料庫安裝
此處不多過多介紹,可以mongodb參考官方的安裝。
Mongoengine
安裝mongoengine
執行命令:pip install mongoengine
執行完畢後,看下安裝的版本,執行命令
pip list
結果如下:
現在應用的是0.15.0版本,說不定當你看到該文章的時候已經不是該版本了。
連接資料庫
連接資料庫其實挺簡單的,在settings.py文件中引入mongoengie,然後通過mongoengine的connect方法連接。mongoengine連接mongodb有很多中方式,可以參考官網。具體操作如下:
analysis/settings.py
增加如下代碼
import mongoenginemongoengine.connect(analysis, host=localhost, port=27017)
其中connect幾個參數簡單說一下:
- analysis: 資料庫的名稱
- host: mongodb資料庫所在的伺服器地址
- port:埠(27017默認的)
這是資料庫,其中手動創建了一個users(全部用小寫)表,往表中插入一條數據(mongodb中稱為文檔),欄位的名字為 username和email。然後看下數據:
{ "_id" : ObjectId("5a1661e4752a376cdafac0da"), "username" : "oogou11", "email" : "oogou11@hotmail.com"}
其中_id是mongodb對文檔生成的一個objectId。對mongodb不熟悉的話,可以認為對應的是sql server 或者oracle的主鍵。
定義Model
資料庫已經有了,在django中對應資料庫的操作,其實就是定義model,然後對model進行操作。首先在/web 建立一個model文件夾,然後創建一個user_model.py文件,即文件的路徑為/web/models/user_model.py
然後user_model.py文件的代碼如下:
#引用mongoenginefrom mongoengine import *class Users(Document): username=StringField() #mongoengine中的欄位類型 email=StringField()
其中Users這個類中的 username和email屬性,對應的就是資料庫中users表中的 「username」和「email」欄位。而mongodb資料庫中的_id對應的是 Users表中的id欄位。這裡不用列出來,mongoengine已經替我們處理了。
注意:欄位以及欄位的名稱 必需與資料庫中的名稱一一對應,因為用的是 Document。
這樣資料庫中的表已經映射到model上。對資料庫的操作無非增、刪、改、查,然後對應到django中就是對model的操作。
讀取數據
現在需要通過訪問 http://localhost:8080/web/ 讀取資料庫中所有的用戶,對應的就是views.py中的index視圖。更改下代碼
/web/views.py
from django.http import HttpResponsefrom django.template import loader# 引用modelfrom .models.user_model import Usersdef index(request): template = loader.get_template(news/index.html) #獲取所有數據 user_data = Users.objects() context = { user_data: user_data, } return HttpResponse(template.render(context, request))
模版index.html代碼更改如下:
/web/templates/news/index.html
{% if user_data %} <ul> {% for user in user_data %} <li> id:{{user.id}} 用戶名:{{user.username}} 郵箱:{{user.email}} </li> {% endfor %} </ul>{% else %} <p>數據為空</p>{% endif %}
然後通過訪問 http://localhost:8080/web/ 得到的結果如下
通過以上結果可以看出讀取的數據。
更新數據
現在需要把郵箱 email的值改成 123@qq.com,讓我們對數據進行操作下吧。為了簡便直接創一個update視圖,然後通過url請求就好了。具體步驟就不做詳細介紹了,可以參考django系列三:創建自定義視圖 然後創建一個update視圖。
增加一個視圖:
/web/views.py
def update(request): id=5a1661e4752a376cdafac0da update_count = Users.objects(id=id).update(email=123@qq.com) return HttpResponse(update_count)
執行 http://localhost:8080/web/update。執行結果返回 1,說明執行成功。
然後再重新請求下 http://localhost:8080/web/
其它操作就不在詳細介紹了,詳見mongoengine文檔。
推薦閱讀:
※關於零基礎學習 Python 有什麼好的建議?
※Django 多線程問題是怎麼回事?
※是否框架的目的是不一樣的?
※國內用 Django 開發的知名站點有哪些?
※緩存中命名keys時,應該有什麼命名規則來命名,方便後期調用以及維護?