如何通过Django框架连接并操作MySQL数据库?

2026-04-28 11:432阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1230个文字,预计阅读时间需要5分钟。

如何通过Django框架连接并操作MySQL数据库?

1. 明确说明:1、基于DjangoTest项目练习

2.已安装MySQL驱动:已安装MySQL驱动,未安装可执行安装命令:pip install pymysql

3.已在Navicat手动创建数据库order_test(由Django自带的ORM是data_first类型)

如何通过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.127.0.0.1:8000/111/

如下图,访问后返回数据添加成功,此时数据库表会insert一条数据

2)访问获取数据的地址127.0.0.1:8000/112/

以上便讲述完成如何使用mysql数据库,至于更新或删除数据,可参考www.runoob.com/django/django-model.html,这里不再演示了

本文共计1230个文字,预计阅读时间需要5分钟。

如何通过Django框架连接并操作MySQL数据库?

1. 明确说明:1、基于DjangoTest项目练习

2.已安装MySQL驱动:已安装MySQL驱动,未安装可执行安装命令:pip install pymysql

3.已在Navicat手动创建数据库order_test(由Django自带的ORM是data_first类型)

如何通过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.127.0.0.1:8000/111/

如下图,访问后返回数据添加成功,此时数据库表会insert一条数据

2)访问获取数据的地址127.0.0.1:8000/112/

以上便讲述完成如何使用mysql数据库,至于更新或删除数据,可参考www.runoob.com/django/django-model.html,这里不再演示了