开发环境:

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. nginx rewrite正则子组最多匹配到$9

    nginx rewrite正则匹配()匹配子组最多匹配到$9,就是从$0到$9 当需要匹配更多子组时,可通过变量来实现 if ($uri ~ ^/forum-15/sortid-74/(.*?)(la ...

  2. list列表转tree树方法

    list转tree递归转换 /** * 递归遍历节点 * @param sourceList * @param parentCode * @return */ public List<Offic ...

  3. HANA数据自助查询

    SAP HANA的客户端是C/S模式的,远程使用不太方便,目前有一款TreeSoft数据库管理系统,可以实现通过web方式,访问自助查询HANA数据.大大提高工作效率.还支持MySQL,Oracle, ...

  4. Intel GPA + 夜神模拟器

    环境:Win10,Intel GPA 2019R2,Nox(夜神模拟器)6.2.8.3 记录下注意的事项 1. 夜神模拟器下载地址建议 : https://www.bignox.com/ 2. 先运行 ...

  5. Java学习笔记-包,classpath,import,jar

    这里介绍Java的包,classpath,import和jar 包(package) 对类文件进行分类管理 给类提供多层命名空间 写在程序文件的第一行 类名的全称的是 包名.类名 包也是一种封装形式 ...

  6. IDEA使用mybatis generator自动生成代码

    主要就三步: 1.pom 文件中引入jar包并配置 build 属性 <dependencies> <!-- 自动生产mapper Begin! --> <depende ...

  7. Guava源码阅读-base-Charsets

    package com.google.common.base; 今天在找base包下的源码阅读时,看到了Charsets,肯定是定义字符集的类,本来就想简单的看一下.(部分内容摘抄自:http://b ...

  8. 2019icpc南昌网络赛

    B. Fire-Fighting Hero (dijstra优先队列+bfs) 题意:刚开始看错题了,以为是k次dijkstra,但是wa了,后来队友指正后发现挺水的.求S到其它点的最短路的最大值an ...

  9. (十三)mybatis 整合 ehcache

    目录 ehcache mybatis 的 Cache 接口 整合步骤 ehcache ehcache 是一个分布式缓存框架 ! 为什么需要分布式缓存? 在大型的项目中,服务器是肯定不止一台的,每台服务 ...

  10. codeforces 1251D Salary Changing (二分+贪心)

    (点击此处查看原题) 题意分析 一共有s元钱,要用这些钱给n个人发工资,发给每个人的工资si有最少和最多限制 si ∈[li,ri],在发给n个人的总工资小于s的情况下,要求发给n个人中的工资的中位数 ...