django无法生成迁移文件_Django初始化项目环境精讲

2023-05-16

上一节中,我们完成了对 settings.py 文件的基本配置,本节我们还需要对新建的项目进一步的操作,从而完成项目的初始化工作。
在《settings.py配置文件详解》一文中,我们介绍了 INSTALLED_APPS 这个安装了 Django 自带应用的列表,诸如 admin 后台管理系统、auth 用户系统应用以及session 会话建立等应用,它们都被安装在了这个列表中。

1. 完成数据库迁移

作为应用(下面我们统称 app)通常都会需要使用数据表来完成状态或数据的保存,Django 自带的 app 也不例外。如果不同步这些应用的数据表到数据库中,而是直接启动项目,在 CMD 命令行就会打印警告信息,并且告知如何解决这个警告信息方法。如图 1 所示:

bad17e8e99ee728ece15f23459986da5.png图1:Django 警告信息以及解决方法

在图1中,用红色方框标注的的就是 Django 的警告信息,告诉我们安装在 INSTALLED_APPS 列表中应用如 admin、auth、session 等需要进行数据库迁移。而且它还告诉我们如何进行迁移,就是使用如下命令来进行数据表的迁移:

python manage.py migrate

提示:“迁移”就是把 Django 默认自带应用的数据表迁移到我们自己的创建的数据库里,有点像搬家的意思,migrate 这个单词的含义就是“迁移”。

如果你是在 Linux 或者 Mac 操做系统,利用终端启动项目后,提示会更加明显,如下图 2 所示:

86b95ea44845df5d0222b6552d718cd0.png图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所示输出:

89fb25b4c78dc1a32d5e163a475ddd07.png图3:完成数据库迁移

2. PyMySQL模块的使用

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

1ae1e68d7abdef41f97a5ccb86be5983.png图4:数据库连接报错

PyMySQL 模块是 Python 的一个第三方模块, Python 3 与 MySQL 数据库的连接就是由它实现的。然后我们进行以下操作:找到 init.py 配置文件,在文件中加上如下代码:

import pymysqlpymysql.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 makemigrationspython 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 有所帮助。

45403ed15f2f8cee2c35acad77f07a9d.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django无法生成迁移文件_Django初始化项目环境精讲 的相关文章

随机推荐

  • 韦东山第一期课程内容概要

    韦东山第一期课程内容概要 1一个嵌入式程序要运行所需的东西1 1第一条指令 b reset1 2 reset要完成的事件1 2 1设置开门狗1 2 2设置时钟1 2 3判断启动方式并设置堆栈1 2 4代码重定位 1 3执行main函数 12
  • 韦东山第一二期衔接课程内容概要

    韦东山第一二期衔接课程内容概要 0 使得一个裸板Jz2440能运行linux应用程序的过程1 uboot启动内核总结1 1 u boot分析之编译体验1 2 u boot分析之Makefile结构分析1 3 u boot分析之源码第一阶段1
  • 嵌入式总线与通信

    嵌入式总线与通信 I2C通信I2C通信的特点I2C通信协议I2C硬件连接I2C在一条数据线SDA上如何实现双向传输 xff1f xff08 如何实现半双工 xff09 SOC上的I2C通用硬件接口I2C接口与接口之间的连接I2C设备在整个A
  • jquery为动态dom元素绑定点击事件(比如动态生成的表格)

    js为动态dom元素绑定点击事件 需要给页面动态加载还未出现的元素添加事件时 xff0c 可以用jQuery的on xff0c live xff0c delegate来绑定事件 叫做委派事件 比如控制的动态生成的表格 xff0c 给一列中的
  • 嵌入式Arm+Linux中断与异常全流程讲解

    嵌入式ARM 43 Linux中断全流程讲解 ARM处理器级别的中断 异常 ARM的异常类型CPU如何检测到异常信息 进入异常处理后怎么返回前置知识 xff1a 流水线 xff0c 指令周期 xff0c 机器周期 xff0c 时钟周期复位
  • Linux设备树

    Linux设备树 1 设备树的引进与体验字符设备驱动程序的三种写法使用设备树时对应的驱动编程只想使用设备树不想深入研究怎么办 本文章基于韦东山关于设备树的课程以及自己的一些想法 xff0c 目录结构和韦东山老师的视频结构相同 1 设备树的引
  • 一些零碎知识点的索引

    一些零碎知识点的索引 前言操作系统 xff08 主要是纯Linux系统级的 xff09 Linux内存管理slab的着色写时复制的应用场景内核高端内存栈查看一个进程的地址空间分布 xff08 代码 数据 栈 xff09 匿名映射Linux中
  • Linux wget遭遇证书不可信(Wget error: ERROR: The certificate of is not trusted.)解决方法

    新安装的debian9系统使用中发现wget时提示证书问题 xff0c 搜索资料得知是缺少ca certificates包引起 Linux安装ca certificates包命令 CentOS系统 用这个 yum install y ca
  • 使用Dnsmasq来解锁Netflix(奈飞)流媒体服务

    原理 xff1a 在一台能看Netflix的IP配置Netflix解锁DNS脚本 xff0c 然后其他不能看Netflix的小鸡使用这个能看的机器的DNS xff0c 达到能看的目的 参考文章 xff1a https www 863134
  • 将它人docker镜像备份到自己docker仓库

    前提 xff1a 机器上安装好docker 1 先创建Docker hub 帐号 xff0c 并创建仓库 首先你需要一个docker hub 帐号 xff0c 记住username xff0c password xff0c email xf
  • CentOS 7 自己手动开启 BBR 加速教程

    下载更换内核 最新内核查看这里 xff1a http elrepo org linux kernel el7 x86 64 RPMS 1 运行以下代码 xff1a rpm import https www span class hljs p
  • Linux中提示-bash: wget: command not found的解决方法

    Liunx系统中 xff0c bash wget command not found是找不到命令的意思 xff0c 也就是无法执行下载命令 xff0c 主要是因为你的系统太干净了 xff0c 没有安装下载命令的控制器 xff0c 我们给系统
  • Linux如何更改root用户密码

    可以使用passwd命令来修改用户的密码 passwd命令用于对用户的密码进行管理 xff0c 可以设置 修改 删除密码 用法示例 xff1a 修改root用户的密码 sudo passwd root 或者直接passwd root
  • Debian 9快速开启Google BBR的方法

    Google BBR是一个TCP加速优化工具 xff0c 类似于锐速 xff0c 可用于优化TCP连接 xff0c 最近Google开源了其TCP BBR拥塞控制算法 xff0c 并提交到了Linux内核 根据实地测试 xff0c 在部署了
  • 解决xshell终端主机名和用户名不显示颜色

    设置完成后是这样 步骤如下 1 打开你连接的Linux服务器 2 在用户文件夹下 xff0c 打开终端 xff0c 或者输入ctrl 43 h显示隐藏文件 3 打开这个文件 bashrc 把这个注释取消掉就可以了
  • 关于安卓唯一标识的汇总及最佳做法

    前言 识别用户唯一性 xff0c 是每个做应用所遇到的问题之一 通常我们会希望有一个唯一的字符 xff0c 去识别关联我们的用户 标识符特性 Android 操作系统提供了多种具有不同行为特性的 ID 我们应该使用何种 ID 取决于以下特性
  • java字符串数组排序_在Java中对字符串数组进行排序

    允许用户使用字符串数组进行演奏 他们可以将字符串添加到数组中 xff0c 从数组中删除字符串 xff0c 在数组中搜索字符串 xff0c 最终他们将能够对数组进行排序 排序使我很困惑 我尝试了几种不同的方法 第一种方法是将数组转换为Arra
  • Arch Linux 新手安装教程

    前言 安装环境 虚拟机软件 xff1a vmware workstations pro 15 5 1安装的arch linux版本 xff1a arch linux 2020 02 01 本文的目的旨在降低新手安装arch linux的难度
  • vm虚拟机摄像头调试_双机调试

    文章来源 xff1a 华盟论坛 条件 xff1a 已经安装好Visual Studio 2015 VM Win7 x64 wdk10 为什么要搭建双机调试 xff0c 普通的应用程序可以直接在本机进行调试 xff1b 但内核程序出错 xff
  • django无法生成迁移文件_Django初始化项目环境精讲

    上一节中 xff0c 我们完成了对 settings py 文件的基本配置 xff0c 本节我们还需要对新建的项目进一步的操作 xff0c 从而完成项目的初始化工作 在 settings py配置文件详解 一文中 xff0c 我们介绍了 I