前面介紹了Django平台的數據交互,這些數據都是在本地存放着,修改內容或者重新啟動服務,數據就消失了,如果我們把數據存放在數據庫中,不就保存了嗎?
ORM
在寫Django數據庫之間,我們首先了解下什么是ORM,ORM就是對象關系映射,是通過使用描述對象和數據庫之間映射的元數據,將面向對象語言程序中的對象自動持久化到關系數據庫中。本質上就是將數據從一種形式轉換到另外一種形式。 (百度百科)
說這么多,不知道大家理解不理解,其實就是通過實例對象的方法幫助我們寫sql語句從而方便我們。(其實就是通過你寫的代碼,然后幫你寫SQL語句)
其實我們今天所寫的Django的數據庫其實就是通過ORM來實現的。
Django數據庫
Django中自帶的也有數據庫(sqlite3),自帶的輕量級數據庫sqlite3,已經完全夠了,當然大家都很數據Mysql數據庫,我們也可以通過Django連接Mysql數據庫
連接Mysql數據庫
在文件settings,py文件下中找到以下配置信息,該信息為連接默認數據庫(sqlite3)
# 連接數據庫 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
如果想要連接Mysql數據庫,我們可以進行修改成以下參數
# 配置MYsql數據庫 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'test', # 數據庫名稱, 'HOST': 'localhost', # 主機地址 'USER': 'root', # 數據庫用戶 'PASSWORD': '821006052', # 密碼 'PORT': 3306 # mysql的端口默認3306 } }
數據庫已經連接成功了。但是還需要安裝mysql插件mysqlclient
pip install mysqlclient
操作數據庫
在文件models.py下創建表名以及表字段
# model.py
# 創建表名已經表字段 from django.db import models # class名代表表名,models.Model固定寫法 class User(models.Model): # username,password 表示創建字段名,長度為32 username = models.CharField(max_length=32) password = models.CharField(max_length=32)
打開cmd,跳轉到項目目錄下執行以下命令,同步數據庫
# 同步數據庫 python manage.py makemigrations
這個時候會看到項目中的migrations中自動生成了一個文件 0001_initial.py, 這個時候我們繼續執行命令
# 創建數據庫表
python manage.py migrate
這個時候我們都已經把數據庫全部創建完成了。
這個時候會創建一些Django自帶的表,如果不需要的話我們可以在sttings.py文件中進行進行屏幕
INSTALLED_APPS = [ 'django.contrib.admin', # admin管理后台站點 'django.contrib.auth', # 身份認證系統 'django.contrib.contenttypes', # 內容類型框架 'django.contrib.sessions', # 會話框架 'django.contrib.messages', # 消息框架 'django.contrib.staticfiles', # 靜態文件管理框架 'Djtest', # 項目應用 ]
migrations
創建好后數據庫,你會發現Django項目中重新創建了一個文件migrations,里面的內容就是數據庫的一些操作
注:
如果一不小心刪除了migrations文件的數據,那么怎么辦?
1、刪除migrations下除了__int__.py的文件
2、重新執行同步數據庫的命令
# 同步數據庫 python manage.py makemigrations # 創建數據庫
python manage.py migrate
添加數據到數據庫
前面工作已經全部完成了,我們直接開始編寫代碼寫入數據庫中,這里還是使用上一篇數據交互的代碼完成。我們直接在視圖中進行修改代碼
# views.py def index(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # 將數據保存到數據庫 models.User.objects.create(username=username,password=password)
return render(request, 'index.html', {'data':username})
這個地方需要注意前面寫的html接收的內容,然后再返回給用戶瀏覽器,這里修改了index.html文件
# index.html
<html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <head> <title>安靜博客樂園</title> </head> <body> <center> <li>歡迎您, <tbody> <tr> <td>{{data}}</td> </tr> </tbody> </li> </center> </ul> </body> </html>
最后工作了,啟動Django服務,進入到對應的地址,輸入用戶名和密碼,點擊提交
提交過后,來到我們的數據庫中,進行查看,數據是否提交(我這里輸入多次不同的數據)
可以發現數據已經全部都存到數據庫中了。這樣就可以把提交過的數據全部都保存在數據庫中,然而不會重啟服務器導致數據丟失了
其他數據庫連接信息配置
# 連接 PostgreSQL django.db.backends.postgresql # 連接 mysql django.db.backends.mysql # 連接 sqlite django.db.backends.sqlite3 # 連接 oracle django.db.backends.oracle