背景
目前大多數(shù)的web頁面需要與mysql進行交互,需要把后端的一些數(shù)據(jù)存放在數(shù)據(jù)庫中持舆,故本文講解哈Django與mysql進行交互的一些操作步驟。
數(shù)據(jù)庫層
1.視圖邏輯需要與數(shù)據(jù)庫進行交互伪窖,故需要用到Django的數(shù)據(jù)庫層將數(shù)據(jù)庫和視圖邏輯進行分離逸寓,提高代碼的可擴展性。
PS.Django本身有嚴格的約定覆山,想要使用Django的數(shù)據(jù)庫層(模型)竹伸,必須創(chuàng)建Django應用,模型需要保存在應用中簇宽。
2.具體交互步驟
1)修改settings.py文件DATABASES的值
DATABASES =?
{ 'default':?
{ 'ENGINE': 'django.db.backends.mysql', # 指定數(shù)據(jù)庫驅(qū)動?
'NAME': 'XXXX', # 指定的數(shù)據(jù)庫名
?'USER': 'XXXX', # 數(shù)據(jù)庫登錄的用戶名?
'PASSWORD': 'XXXX', # 登錄數(shù)據(jù)庫的密碼
?'HOST': 'XXXX',?
'PORT': '3306', # 數(shù)據(jù)庫服務器端口勋篓,mysql默認為3306 } }
2)python 3.6之前的版本需安裝第三方庫MySQLdb,python3.6后的版本需安裝pymysql
3)項目目錄下創(chuàng)建polls應用魏割,執(zhí)行指令python manage.py startapp polls
4)poll應用中的models.py文件中創(chuàng)建class類譬嚣,注:這些類都是models.Model的子類,一個模型對應于一個數(shù)據(jù)庫表钞它,模型中的各個屬性分別對應于數(shù)據(jù)庫表中的一列拜银。【屬性的名稱對應于列的名稱遭垛,字段的類型對應于數(shù)據(jù)庫列的類型】
5)在INSTALLED_APPS中增加新增了poll應用 INSTALLED_APPS= ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'books', )
6)運行python manage.py check檢查模型代碼有無異常尼桶,返回System check identified no issues (0 silenced)代表成功
7)執(zhí)行python manage.py makemigrations polls
8)執(zhí)行python manage.py migrate就可以在mysql數(shù)據(jù)庫中看見新建的表了
注:當前整個步驟針對的是新建數(shù)據(jù)庫記錄,但實際日常使用中還存在已有數(shù)據(jù)庫的情況下锯仪,需要做好相關關聯(lián)的場景泵督,此時可調(diào)整哈一些步驟,具體實現(xiàn)見如下說明:
1)python manage.py inspectdb --database 已有數(shù)據(jù)庫名 > polls/models.py
2)python manage.py makemigrations polls
3)python manage.py migrate
數(shù)據(jù)庫增刪改查
關于對數(shù)據(jù)庫進行增刪改查操作可類比mysql語句庶喜,不過需要借助get()和filter()方法來達到目標
匯總關聯(lián)數(shù)據(jù)庫的一些問題及解決方案
1.執(zhí)行python manage.py makemigrations polls時出現(xiàn)錯誤提示說明:django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0002_logentry_remove_auto_add is applied before its dependency admin.0001_initial on database 'default'.
解決方案:
1)注釋掉setting文件中INSTALLED_APPS中的 #'django.contrib.admin'
2)注釋掉urls文件中urlpatterns中的 #url('admin/', admin.site.urls)
3)再去執(zhí)行python manage.py makemigrations polls就不會報錯了
4)建完數(shù)據(jù)庫之后恢復步驟1&2的注釋
2.新建一個應用小腊,執(zhí)行python manage.py migrate時,總是報錯:xxx表已存在
解決方案:
1)執(zhí)行python manage.py migrate polls --fake
2)再執(zhí)行python manage.py makemigrations polls和python manage.py migrate即可