Django——如何使用mysql數據庫

一、前提說明

1、基於DjangoTest項目演練

2、已經安裝了mysql驅動,若未安裝可以執行安裝命令:pip install pymysql

3、已在navicat手動創建了數據庫order_test(由於Django自帶的orm是data_first類型的ORM,使用前必須先創建數據庫)

4、其他說明

Django框架功能齊全自帶數據庫操作功能,本文主要介紹Django的ORM框架,到目前爲止,當我們的程序涉及到數據庫相關操作時,我們一般都會這麼搞:

  • 創建數據庫,設計表結構和字段
  • 使用 MySQLdb 來連接數據庫,並編寫數據訪問層代碼
  • 業務邏輯層去調用數據訪問層執行數據庫操作

ORM:Object Relational Mapping(關係對象映射)

類名對應------》數據庫中的表名

類屬性對應---------》數據庫裏的字段

類實例對應---------》數據庫表裏的一行數據

二、修改setting.py

  在項目的 settings.py 文件中找到 DATABASES 配置項,將其信息修改爲如下:

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.sqlite3',
        #'NAME': BASE_DIR / 'db.sqlite3',
        #修改DATABASES 配置項
        'ENGINE': 'django.db.backends.mysql',  # 數據庫引擎
        'NAME': 'order_test',  # 數據庫名稱
        'HOST': '12.18.20.42',  # 數據庫地址,本機 ip 地址 127.0.0.1
        'PORT': 13306,  # 端口
        'USER': 'doud',  # 數據庫用戶名
        'PASSWORD': 'cNiryBWa',  # 數據庫密碼

    }
}

三、修改__init__.py

告訴 Django 使用 pymysql 模塊連接 mysql 數據庫,設置 Django默認連接MySQL的方式

# 在與 settings.py 同級目錄下的 __init__.py 中引入模塊和進行配置
import pymysql
pymysql.install_as_MySQLdb()

 四、定義模型

1、創建APP

Django 規定,如果要使用模型,必須要創建一個 app。我們使用以下命令創建一個 TestModel 的 app

django-admin startapp TestModel

2、修改 TestModel/models.py 文件,創建表

  類名Test代表了數據庫表名,且繼承了models.Model,類裏面的字段代表數據表中的字段(name),數據類型則由CharField(相當於varchar)、DateField(相當於datetime), max_length 參數限定長度。

注:說通俗點,就是name字段是創建表時要定義的字段

from django.db import models

# Create your models here.

class Test(models.Model):
    name = models.CharField(max_length=20)

3、修改 DjangoTest/settings.py 

在 settings.py 中找到INSTALLED_APPS這一項,修改如下,即註冊APP:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'TestModel', #添加此項
]

4、執行創建表結構的命令

  只要模型文件models.py進行了內容的更新,我們都會使用python manage.py makemigrations 和 python manage.py migrate這兩個命令

1)python manage.py makemigrations TestModel

當我們第一次在models.py文件新建model類(一個類對應數據庫中的一張數據表)時,執行python manage.py makemigrations 命令之後,應用目錄下的migations的文件下多了一個001的文件。文件內容記錄了我們剛纔在medels.py文件的操作

 2)python manage.py migrate TestModel

  執行了第1步的命令後,數據庫裏是沒有TestMode_test模型的表的,此時要再執行python manage.py migrate,刷新數據庫可以看到新建好的數據表,數據表中字段也出現了

  下圖是表結構,表名組成結構爲:應用名_類名(如:TestModel_test)

注意:儘管我們沒有在 models 給表設置主鍵,但是 Django 會自動添加一個 id 作爲主鍵。

3)問題:兩個命令的關係?可以只執行其中一個命令嗎?

答案:首先,第一個命令的作用是記錄即將要做的數據庫操作,但實際上並沒有進行數據庫操作。第二個的命令的作用是對數據庫進行操作(建表、改表等)

 綜上:python manage.py makemigrations命令記錄對models文件的修改。python manage.py migrate命令在數據庫中創建表和數據

 五、數據庫操作

1、編輯TestModel/tests.py

  直接用現有的tests.py文件實戰演練就行了,懶得再創建多1個文件。

tests.py源碼如下,包含:1)添加數據:需要先創建對象,然後再執行 save 函數,相當於SQL中的INSERT;2)獲取數據

from django.test import TestCase

# Create your tests here.

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test


# 數據庫操作:添加數據
def testdb(request):
    test1 = Test(name='lijun')
    test1.save()
    return HttpResponse("<p>數據添加成功!</p>")

# 數據庫操作:獲取數據
def querry(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>")

 2、修改DjangoTest/urls.py

from django.contrib import admin
from django.urls import path

from DjangoTest import views
from TestModel import tests

urlpatterns = [
    path('admin/', admin.site.urls),
    path('123/',views.student),# 訪問視圖的student對象,student對象指向的是HelloWorld.html
    path('122/',views.hello) ,# 訪問的是視圖的hello對象,hello對象使用的是HttpResponse直接返回的值
    path('111/',tests.testdb), # 訪問的是TestModel應用的tests文件下的testdb對象
    path('112/',tests.querry)  # 訪問的是TestModel應用的tests文件下的querry對象
]

 3、瀏覽器訪問

1)訪問添加數據的地址 http://127.0.0.1:8000/111/

如下圖,訪問後返回數據添加成功,此時數據庫表會insert一條數據

 

 2)訪問獲取數據的地址http://127.0.0.1:8000/112/

 

以上便講述完成如何使用mysql數據庫,至於更新或刪除數據,可參考https://www.runoob.com/django/django-model.html,這裏不再演示了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章