【Python】【进阶篇】18、Django初始化项目环境精讲
目录
- 18、Django初始化项目环境精讲
- 1. 完成数据库迁移
- 2. PyMySQL模块的使用
- 3. migrate与makemigrations命令详解
- 1) makegrations生成数据库迁移文件
- 2) migrate执行数据库迁移命令
- 3) 完成数据库迁移总结
18、Django初始化项目环境精讲
上一节中,我们完成了对 settings.py 文件的基本配置,本节我们还需要对新建的项目进一步的操作,从而完成项目的初始化工作。
在《settings.py配置文件详解》一文中,我们介绍了 INSTALLED_APPS 这个安装了 Django 自带应用的列表,诸如 admin 后台管理系统、auth 用户系统应用以及session 会话建立等应用,它们都被安装在了这个列表中。
1. 完成数据库迁移
作为应用(下面我们统称 app)通常都会需要使用数据表来完成状态或数据的保存,Django 自带的 app 也不例外。如果不同步这些应用的数据表到数据库中,而是直接启动项目,在 CMD 命令行就会打印警告信息,并且告知如何解决这个警告信息方法。如图 1 所示:

图1:Django 警告信息以及解决方法
在图1中,用红色方框标注的的就是 Django 的警告信息,告诉我们安装在 INSTALLED_APPS 列表中应用如 admin、auth、session 等需要进行数据库迁移。而且它还告诉我们如何进行迁移,就是使用如下命令来进行数据表的迁移:
python manage.py migrate
提示:“迁移”就是把 Django 默认自带应用的数据表迁移到我们自己的创建的数据库里,有点像搬家的意思,migrate 这个单词的含义就是“迁移”。
如果你是在 Linux 或者 Mac 操做系统,利用终端启动项目后,提示会更加明显,如下图 2 所示:

图2:Linux 终端运行项目
因为 Linux 系统同时安装了 python 2.7 版本和 python 3.x 的版本,所以使用如下命令进行数据库的迁移。
python3 manage.py migrate
migrate 是 manage.py 的子命令,它主要用来将应用的数据表同步到数据库中。执行后,它会检查 INSTALLED_APPS 里配置的应用列表,依次为每个应用创建所需要的数据表。
我们可以根据自己的需要来决定使用哪个应用,如果项目本身用不到,可以将其在列表注释掉。那么migrate就不会执行它了。在执行此命令之前,你的数据库应该处于开启状态而且你的 settings.py 文件已经按照《如何配置settings.py文件》一节做了相应的配置。执行命令后,在 CMD 命令行得到如图3所示输出:

图3:完成数据库迁移
2. PyMySQL模块的使用
如果你的终端看到如图 4 所示的报错信息,也不必紧张,这个错误信息是由于 MySQLdb 不支持 Python 3 导致的,所以 Django 连接MySQL就不能在使用 MySQLdb 了,我们需要用一个驱动模块来实现 MySQL 数据库 与 Django 的连接 ,这时候就用到了一个 Python 的模块,也就是 PyMySQL 模块。

图4:数据库连接报错
PyMySQL 模块是 Python 的一个第三方模块, Python 3 与 MySQL 数据库的连接就是由它实现的。然后我们进行以下操作:找到
init.py 配置文件,在文件中加上如下代码:
import pymysql
pymysql.install_as_MySQLdb()
这就表示用 PyMySql 代替 MySQLdb 来实现 Django 与 MySQL
数据库的交互。按照上述的方式配置完成后,再执行迁移命令,就可以顺利完成项目的初始化工作了。
3. migrate与makemigrations命令详解
通过图 3 所示,我们能够得出执行完 migrate 命令后,在数据库 bookstoredb 中就生成了 admin、auth、session
等应用所需要的数据表,我们可以进入 MySQL 命令界面,使用如下命令查看创建了哪些表。
SHOW TABLES;
输出结果如下所示,这就是在项目数据库中生成的表:
mysql> show tables;
+----------------------------+
| Tables_in_bookstoredb |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
10 rows in set (0.01 sec)
这里使用一个命令就完成了数据库的迁移工作,但是有两点问题值得我们思考,migrate
是怎么知道要创建哪些表的,而且如果这些表修改了,它又怎样去维护这些表与数据库中已经迁移的表保持一致呢?下面我们来解答这个疑惑。
Django 对于数据库的迁移工作通过两个命令来实现,一个就是我们上面介绍的 migrate 命令,另个命令如下所示:
python manage.py makemigrations
makemigrations 命令会检测应用目录下是否存在 migrations 目录,如果没有则进行创建。首先,会根据应用的表结构定义生成一个
0001_inital.py 文件,里面定义了数据表的结构。
1) makegrations生成数据库迁移文件
当数据表更改后,我们首先执行 makemigrations 命令,然后 Django
会重新生成一个新的数据库迁移文件用来记录表结构之间的差异,命名规则是对上一个迁移文件的序列号加1,如 0002_xxx、0003_xxx。
2) migrate执行数据库迁移命令
之后,再次执行 migrate 命令让新的迁移文件生效并同步回数据库,从而完成表结构定义的修改。对于 Django
内置的应用,数据库迁移文件已经生成好了,所以直接使用 migrate 命令即可。
3) 完成数据库迁移总结
每一次数据表更改后,都需要执行下面的两个命令,它们的执行顺序如下所示:
python manage.py makemigrations
python manag.py migrate
为了保证已经完成的迁移工作不会重复的执行,Django 会把每一次数据库迁移记录到 django_migrations 表中,每一次执行 migrate
命令前都会比较迁移文件是否已经记录在表中了,只有没出现过的才会执行。若想查看当前项目的第一次 migrate 生成的迁移记录,可以在 MySQL
命令行界面使用如下命令查看 :
select * from django_migrations;
输出结果如下所示:
mysql> select * from django_migrations;
+----+--------------+------------------------------------------+----------------------------+
| id | app | name | applied |
+----+--------------+------------------------------------------+----------------------------+
| 1 | contenttypes | 0001_initial | 2020-03-31 17:53:24.328380 |
| 2 | auth | 0001_initial | 2020-03-31 17:53:24.772333 |
| 3 | admin | 0001_initial | 2020-03-31 17:53:25.304430 |
| 4 | admin | 0002_logentry_remove_auto_add | 2020-03-31 17:53:25.389557 |
| 5 | admin | 0003_logentry_add_action_flag_choices | 2020-03-31 17:53:25.400529 |
| 6 | contenttypes | 0002_remove_content_type_name | 2020-03-31 17:53:25.483671 |
| 7 | auth | 0002_alter_permission_name_max_length | 2020-03-31 17:53:25.499663 |
| 8 | auth | 0003_alter_user_email_max_length | 2020-03-31 17:53:25.523571 |
| 9 | auth | 0004_alter_user_username_opts | 2020-03-31 17:53:25.540536 |
| 10 | auth | 0005_alter_user_last_login_null | 2020-03-31 17:53:25.584193 |
| 11 | auth | 0006_require_contenttypes_0002 | 2020-03-31 17:53:25.589585 |
| 12 | auth | 0007_alter_validators_add_error_messages | 2020-03-31 17:53:25.599557 |
| 13 | auth | 0008_alter_user_username_max_length | 2020-03-31 17:53:25.617511 |
| 14 | auth | 0009_alter_user_last_name_max_length | 2020-03-31 17:53:25.635472 |
| 15 | auth | 0010_alter_group_name_max_length | 2020-03-31 17:53:25.653411 |
| 16 | auth | 0011_update_proxy_permissions | 2020-03-31 17:53:25.664380 |
| 17 | sessions | 0001_initial | 2020-03-31 17:53:25.688552 |
+----+--------------+------------------------------------------+----------------------------+
17 rows in set (0.00 sec)
至此,BookStore 项目的骨架、数据库配置和迁移都已经完成了,后面需要做的就是完成应用的创建和编写,能够提供一些功能给用户使用。本节详细讲解了项目初始化过程中会遇到的一些问题,并对他们做了深度的剖析,包括 Django 与 MySQL 数据库的连接以及数据库迁命令的解析,希望这些知识对大家学习 Django 有所帮助。
相关文章:
【Python】【进阶篇】18、Django初始化项目环境精讲
目录 18、Django初始化项目环境精讲1. 完成数据库迁移2. PyMySQL模块的使用3. migrate与makemigrations命令详解1) makegrations生成数据库迁移文件2) migrate执行数据库迁移命令3) 完成数据库迁移总结 18、Django初始化项目环境精讲 上一节中,我们完成了对 settin…...
Web前端基础
一.说明 如果你要了解web前端领域,那么三种语言是你必须要了解的,即html5、CSS、Javascript是你必须要了解的,通过前面的专栏内容你一定对html标记语言非常熟悉,那么其他两种语言是什么,他们怎么和html联系在一起&…...
ACM 1007 | 分段函数求值
文章目录 0x00 前言 0x01 题目描述 0x02 问题分析 0x03 代码设计 0x04 完整代码 0x05 运行效果 0x06 总结 0x00 前言 C 语言网不仅提供 C 语言,还包括 C 、 java 、算法与数据结构等课程在内的各种入门教程、视频录像、编程经验、编译器教程及软件下载、题解博…...
ChatGPT技术原理 第十四章:未来发展方向
目录 14.1 多模态对话生成 14.2 跨语言对话生成 14.3 增量学习 14.4 深度强化学习...
大型水利投资集团,打造数智财资管理新范式
随着我国城市化进程的不断推进,城市基础设施在国民经济中的作用愈加重要,其建设水平直接影响一个城市的竞争力。国有城投、水投等企业作为城市基础设施建设的主要参与者,其重要性不言而喻。随着国家、地方对基础设施重要性认识的加深以及政府…...
【java】彻底剖析 Synchronized
文章目录 前言对象结构Monitor 对象Synchronized特征原子性可见性有序性可重入锁 锁升级的过程 前言 源码级别剖析Synchronized 对象结构 Synchronized是Java中的隐式锁,它的获取锁和释放锁都是隐式的,完全交由JVM帮助我们操作,在了解Sync…...
有反爬机制就爬不了吗?那是你还不知道反反爬,道高一尺魔高一丈啊
文章目录 一、从用户请求的Headers反爬虫二、基于用户行为反爬虫(1)方法1(2)方法2 三、动态页面的反爬虫四.总结 不知道你们在用爬虫爬数据的时候是否有发现,越来越多的网站都有自己的反爬机制,抓取数据已经…...
手把手教你本地CPU环境部署清华大模型ChatGLM-6B,利用量化模型,本地即可开始智能聊天,达到ChatGPT的80%
大家好,我是微学AI,今天教你们本地CPU环境部署清华大ChatGLM-6B模型,利用量化模型,每个人都能跑动大模型。ChatGLM-6B是一款出色的中英双语对话模型,拥有超过62亿个参数,可高效地处理日常对话场景。与GLM-1…...
FFmpeg 自定义IO CONTEXT实现音频解码,以及seek函数
对于从音频流buffer中解码的场景中,我们需要实现自己的io context 去从buffer中解码,参考ffmepg官方实例:doc/examples/avio_reading.c 关于是否要实现avio context中的seek函数,需要看需要解码什么格式,大部分格式不…...
技能升级(2023寒假每日一题 13)
小蓝最近正在玩一款 RPG 游戏。 他的角色一共有 N N N 个可以加攻击力的技能。 其中第 i i i 个技能首次升级可以提升 A i A_i Ai 点攻击力,以后每次升级增加的点数都会减少 B i B_i Bi。 ⌈ A i / B i ⌉ ⌈A_i/B_i⌉ ⌈Ai/Bi⌉(上取整&a…...
低频量化之 可转债 配债数据及策略 - 全网独家
目录 历史文章可转债配债数据 待发转债(进展统计)待发转债(行业统计)待发转债(5证监会通过,PE排序)待发转债(5证监会通过,安全垫排序)待发转债(5证…...
Code area 和Data area的区别
Code Area FLASH :程序在这个flash运行时,几乎没有延时, 运行速度以时钟设置为准。 Data Area FLASH: 程序在这段flash运行时,每条语句都有延时, 最后的速度可能是以10M为时钟(举例)…...
Oracle LiveLabs DB Security (数据库安全)实验汇总
在Oracle LiveLabs中,和数据库安全相关的实验分为2个系列,共12个实验。 Oracle数据库安全架构如下图: 这些实验涉及了Oracle安全相关的特性,企业版选件,独立产品和服务。 关于Oracle安全产品的中文主页可见&#…...
PAT A1012 The Best Rank
1012 The Best Rank 分数 25 作者 CHEN, Yue 单位 浙江大学 To evaluate the performance of our first year CS majored students, we consider their grades of three courses only: C - C Programming Language, M - Mathematics (Calculus or Linear Algrbra), and E -…...
“我和AI抠图网站的秘密情缘“
在浏览器里面意外发现了一个AI抠图工,了解了一下,AI抠图基于深度学习框架,结合智能检测识别技术,目前已能够实现高精视,秒级全自动主体、场景像素级识别等的分割能力。 一款好的抠图工具,可以把照片变得更加…...
最多能打多少场比赛呢
凌乱的yyy / 线段覆盖 题目背景 快 noip 了,yyy 很紧张! 题目描述 现在各大 oj 上有 n n n 个比赛,每个比赛的开始、结束的时间点是知道的。 yyy 认为,参加越多的比赛,noip 就能考的越好(假的&#x…...
鸿蒙Hi3861学习二-程序烧录与日志输出
一、准备事项 开发板:BearPi-Hm Nano windows工具:HiBurn.exe https://pan.baidu.com/s/18OQD1_BvjNKD_J2e2iX3qg?pwdadrs 提取码:adrs windows工具:MobaXterm和RaiDrive 把ubuntu文件夹映射到windows本地。可以参考如下链接&am…...
typescript Awaited<Type>教程用法
typescript Awaited教程用法 文章目录 typescript Awaited<Type>教程用法 ts4.5发布了Awaited,但是很多人不明白Awaited的用法。 首先看一下官方的说明:这种类型旨在模拟函数await中的操作async,或 s.then()上的方法——特别是它们递归…...
AES硬件运算单元
功能描述 AES单元主要功能如下: 支持解密密钥扩展 支持128bit/192bit/256bit的密钥长度支持ECBCBCCTRM支持DMA进行自动数据传输 支持GF(2^128)域下的乘法,支持GMAC 工作模式 AES有4种工作模式,通过配置MODE1:0]寄存器设置。 模式1:用存储在AES KEYRx寄存…...
mulesoft MCIA 破釜沉舟备考 2023.04.28.26 (易错题)
mulesoft MCIA 破釜沉舟备考 2023.04.28.26 (易错题) 1. According to MuleSoft, what is a major distinguishing characteristic of an application network in relation to the integration of systems, data, and devices?2. An integration team follows MuleSoft’s r…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
