开发环境:

Windows 10

Python 3.7.4

Django 2.2.6

Mysql 8.0.17

承接上一节:https://www.cnblogs.com/daydayupup/p/11741873.html

数据库配置

Django默认使用sqlite3数据库,这是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中。由于Python本身内置了sqlite3,所以无需安装任何程序,就可以直接使用它。

如果要连接Mysql数据库的话,就要下载相应的数据库驱动模块,并且在seetings.py文件中做相应的修改。

首先,打开CMD,使用pip下载MySQL数据库驱动模块,我使用的是mysqlclient

pip  install mysqlclient

接着打开mysite/seeting.py文件,使用“Ctrl+F”组合键搜索“DATABASES”,默认情况下如图所示

配置MySQL数据库

注意:你需要预先创建一个数据库,Django不会自动帮你创建数据库。当然,如果使用的是sqlite3就不需要做任何预先配置。

接下来,搜索“INSTALLED_APPS”,在这里注册你的APP。

注册APP的作用是使你的APP能够被其他项目使用,或者可以打包和分发给其他人在他们的项目中使用。

上面的其他条目包含了在你的项目中会使用的所有Django应用,这些应用被默认开启是为了给常规项目带来方便。默认开启的某些应用需要至少一张数据表,所以,在使用他们之前需要在数据库中创建一些表:

py manage.py migrate

可以使用数据库命令行来列出Django所创建的表

创建模型

模型是真实数据的简单明确的描述。它包含了储存的数据所必要的字段和行为。Django 遵循DRY Principle。它的目标是你只需要定义数据模型,然后其它的杂七杂八代码你都不用关心,它们会自动从模型生成。

Django通过自定义Python类的形式来定义具体的模型,每个模型的物理存在方式就是一个Python的类,每个模型代表数据库中的一张表,每个类的实例代表数据表中的一行数据,类中的每个变量代表数据表中的一列字段。Django通过模型,将Python代码和数据库操作结合起来,实现对SQL查询语言的封装。也就是说,你可以不会管理数据库,可以不会SQL语言,你同样能通过Python的代码进行数据库的操作。

在polls/models中,新建两个模型,分别为Question和Chocie。Question包含一个问题和一个发布日期。Choice包含两个字段:该选项的文本描述和该选项的投票数。每一条Choice都关联到一个Question。这些都是由Python的类来体现,编写的全是Python的代码,不接触任何SQL语句。现在,编辑polls/models.py文件,具体代码如下:

#polls/models

from django.db import models

class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published') class Choice(models.Model):
question = models.ForeignKey(Question,on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
  • 在上述代码中,每个类都是django.db.models.Model的子类。
  • 每个字段都是Field类的实例,比如,字符字段被表示为CharField,日期时间字段表示为DateTimeField。这将告诉Django每个字段要处理的数据类型。
  • 每个Field类实例的变量的名字(如:question_text)也是字段的名字,因此,变量命名要符合数据库命名的格式。
  • 定义某些Field类实例需要参数,如 question_text 需要一个 max_length 参数。这个参数的用处不止用来定义数据库结构,也用于数据验证。
  • Field类实例也可以接受多个可选参数,如 defaul=0 就是一个可选参数。
  • 注意在最后,我们使用ForeignKey定义了一个关系。这将告诉 Django,每个Choice对象都关联到一个Question对象。Django支持所有常用的数据库关系:多对一、多对多和一对一。

激活模型

py manage.py makemigrations polls

接着,你会看到如下输出

通过运行 makemigrations 命令,Django会检测你对模型文件的修改,也就是告诉Django模型发生改变,并且把这次改动保存为一次迁移(migration)。

迁移(migration)是Django对于模型定义(也就是数据库结构)的变化的存储形式。说白了,迁移就是存储你对模型修改的行为的记录文件

我们可以在polls/migrations/0001_initial.py中查看我们刚刚记录的迁移数据,它也可以被手动修改。

数据迁移

接着,我们使用migrate命令对数据库进行真正的数据迁移:

py manage.py migrate

这个migrate命令选中所有还未执行过的迁移(migration)(Django 通过在数据库中创建一个特殊的表 django_migrations 来跟踪执行过哪些迁移)并应用在数据库上 - 也就是将你对模型的更改同步到数据库结构上。

数据迁移被分解成生成和应用两个命令是为了让你能够在代码控制系统上提交迁移数据并使其能在多个应用里使用;这不仅仅会让开发更加简单,也给别的开发者和生产环境中的使用带来方便。

使用mysql命令检查test1的数据库表,如下图所示:

这说明数据迁移成功!

从中也可看出数据库表的命名方式是 APP名字_models中定义的类名 。

Django学习:连接Mysql数据库的更多相关文章

  1. django 中连接mysql数据库的操作步骤

    django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys ...

  2. Error loading MySQLdb module: No module named 'MySQLdb'----------- django成功连接mysql数据库的方法

    在进行django学习过程中,尝试使用框架连接mysql数据库,启动服务器的时候经常遇到Error loading MySQLdb module: No module named 'MySQLdb' ...

  3. 在Django中连接MySQL数据库(Python3)

    我的环境:      python3.6,      Django2.1.5,      MySQL8.0.15,      win10,      PyCharm, 要求:已经安装了MySQL数据库 ...

  4. Pycharm中的Django项目连接mysql数据库

    一.安装Pycharm和Django就不详细说了,自行百度 二.新建Django项目也不说了 三.配置Django连接到mysql 1.models.py写一个类,继承models.Model cla ...

  5. 基于Python3.6使用Django框架连接mysql数据库的驱动模块安装解决办法

    解决办法1 使用PyMySQL模块,直接使用pip install pymysql即可. 参考文章:https://www.cnblogs.com/wcwnina/p/8719482.html 原文内 ...

  6. Mybatis学习---连接MySQL数据库

    [目录]

  7. django新建项目,连接mysql数据库

    安装django,进入Django目录,运行 python setup.py install 在workplace目录下新建一个名为site01的项目: cd workplacedjango-admi ...

  8. Django中使用mysql数据库并使用原生sql语句操作

    Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...

  9. 搭建django项目连接mysql数据库环境

    开通博客园这么久,即将写下第一篇博客,十分兴奋.首先了,庆祝自己写下了码农生涯博客园第一篇博客,其次了,庆祝自己经过了10个小时奋战,终于成功搭建django项目连接mysql数据库的环境.在此过程中 ...

随机推荐

  1. python中Requests的重试机制

    requests原生支持 import requests from requests.adapters import HTTPAdapter s = requests.Session() # 重试次数 ...

  2. EasyNetQ使用(五)【基于主题的路由,控制队列名称】

    RabbitMQ有一个很酷的功能,基于主题的路由,这个功能允许订阅者基于多个条件去过滤消息.一个主题是由点号分隔的单词列表,随消息一同发布.例如:“stock.usd.nyse” 或 “book.uk ...

  3. Leetcode之分治法专题-654. 最大二叉树(Maximum Binary Tree)

    Leetcode之分治法专题-654. 最大二叉树(Maximum Binary Tree) 给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左 ...

  4. Unit Testing, Integration Testing and Functional Testing

    转载自:https://codeutopia.net/blog/2015/04/11/what-are-unit-testing-integration-testing-and-functional- ...

  5. leetcode548 Split Array with Equal Sum

    思路: 使用哈希表降低复杂度.具体来说: 枚举j: 枚举i,如果sum[i - 1] == sum[j - 1] - sum[i],就用哈希表把sum[i - 1]记录下来: 枚举k,如果sum[k ...

  6. poj2253(floyd变形)

    题目链接:https://vjudge.net/problem/POJ-2253 题意:给出n个点的坐标,求点1到点2的forg distance,其定义为点1到点2的所有路径中最长边的最小值. 思路 ...

  7. Gradle DSL Walle渠道包后安装启动APP

    DSL(Domain-Specific Language) Gradle 是一个编译打包工具,但实际上它也是一个编程框架. Task 是 Gradle 中的一种数据类型,它代表了一些要执行或者要干的工 ...

  8. IT 界的“名言”

    --喜欢记得关注我哟[shoshana]-- 中国有很多古代警世名言,朗朗上口,凝聚了很多故事与哲理.硅谷的互联网公司里头也有一些这样的名言,凝聚了很多公司价值观和做事的方法,对于很多程序员来说,其影 ...

  9. 二叉查找树 & B(B-)树 & B+树 & B*树

    一 二叉查找树 1 特点 (1)所有非叶子结点至多拥有两个子节点, left和right (2)一个结点存储一个关键字 (3)非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树 2 ...

  10. 【AC自动机】文本生成器

    [题目链接] https://loj.ac/problem/10063 [题意] 给出长度为m,n个模式串,请问只要长度为m的串中有一个模式串就算是可读. [分析] 其实如果直接分析全部可读的情况,一 ...