Django学习:连接Mysql数据库
开发环境:
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数据库的更多相关文章
- django 中连接mysql数据库的操作步骤
django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys ...
- Error loading MySQLdb module: No module named 'MySQLdb'----------- django成功连接mysql数据库的方法
在进行django学习过程中,尝试使用框架连接mysql数据库,启动服务器的时候经常遇到Error loading MySQLdb module: No module named 'MySQLdb' ...
- 在Django中连接MySQL数据库(Python3)
我的环境: python3.6, Django2.1.5, MySQL8.0.15, win10, PyCharm, 要求:已经安装了MySQL数据库 ...
- Pycharm中的Django项目连接mysql数据库
一.安装Pycharm和Django就不详细说了,自行百度 二.新建Django项目也不说了 三.配置Django连接到mysql 1.models.py写一个类,继承models.Model cla ...
- 基于Python3.6使用Django框架连接mysql数据库的驱动模块安装解决办法
解决办法1 使用PyMySQL模块,直接使用pip install pymysql即可. 参考文章:https://www.cnblogs.com/wcwnina/p/8719482.html 原文内 ...
- Mybatis学习---连接MySQL数据库
[目录]
- django新建项目,连接mysql数据库
安装django,进入Django目录,运行 python setup.py install 在workplace目录下新建一个名为site01的项目: cd workplacedjango-admi ...
- Django中使用mysql数据库并使用原生sql语句操作
Django自身默认使用sqlite3这个轻量级的数据库,但是当我们开发网站时,sqlite3就没有mysql好,sqlite3适合一些手机上开发使用的数据库. 准备的软件mysql数据库,版本5.7 ...
- 搭建django项目连接mysql数据库环境
开通博客园这么久,即将写下第一篇博客,十分兴奋.首先了,庆祝自己写下了码农生涯博客园第一篇博客,其次了,庆祝自己经过了10个小时奋战,终于成功搭建django项目连接mysql数据库的环境.在此过程中 ...
随机推荐
- [C++]Yellow Cards - GYM - 102348A(Practice *) - CodeForces
1 Problem Description Problem The final match of the Berland Football Cup has been held recently. Th ...
- java工具类学习,系统中用户密码加密总结
现在项目,用户注册登录部分很少有涉及到了,原因:现在热门开发框架都已经在底层帮我们做了一套用户注册,密码加密,登录认证,权限控制,缓存数据等基本功能. 这有利于项目的快速完成,只需要搬砖码畜们专注于业 ...
- Spark2.4源码阅读1-Shuffle机制概述
本文参考: a. https://www.jianshu.com/p/c46bfaa5dd15 1. shuffle及历史简介 shuffle,即"洗牌",所有采用map-redu ...
- Instant Messaging for Business: Your 10 Best Options
Instant Messaging for Business: Your 10 Best Options By Iaroslav Kudritskiy It's probably not a surp ...
- 《剑指offer》数组专题 (牛客10.22)
目录 // Q01 二维部分有序数组查找 [善用性质] // Q06 旋转数组中的最小元素 [二分 || 暴力] Q13 调整数组顺序使奇数位于偶数前 / Q19 顺时针打印矩阵 [使用边界变量] / ...
- 《剑指offer》字符串专题 (牛客11.01)
字符串的题目难度不一,涉及到的考点有字符串处理.字符串匹配(自动机.正则).模拟,以及递归.动态规划等算法. 难度 题目 知识点 ☆ 02. 替换空格 从后往前 ☆☆ 27. 字符串的排列 回溯,St ...
- manjar 搭建aria2c下载器
从添加或删除软件管理程序里安装 aria2. 在一个地方创建一个文本文件,名为 「aria2.conf」 : rpc-user=我是用户名 rpc-passwd=我是密码 enable-rpc=tru ...
- 最新 浪潮java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.浪潮等10家互联网公司的校招Offer,因为某些自身原因最终选择了浪潮.6.7月主要是做系统复习.项目复盘.LeetCode ...
- oauth2中org.springframework.security.core.userdetails.User无法转换为封装的AuthorizationInfoBean
用springboot + oauth2 + redis搭建了一个项目,创建一个自定义的AuthorizationInfoBean继承org.springframework.security.core ...
- vue中可以自定义动画的前缀
vue中可以自定义动画的前缀1.只需在中加入name属性即可 <transition name="my"> <h6 v-if="flag2"& ...