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,这里不再演示了

 

posted @ 2022-06-16 16:18  一加一  阅读(4225)  评论(0编辑  收藏  举报