Django 数据库迁移反复出错

这篇具有很好参考价值的文章主要介绍了Django 数据库迁移反复出错。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Django 的数据库迁移有非常多问题,尤其是我们引入了一个维护了非常多年的大插件,比方说 wagtail。
这里总结一些常见问题和解决思路,我自己使用的是 MySQL(MariaDB)

迁移机制

首先说明一下 Django 数据迁移的机制

python manage.py makemigrations
# 在相关应用的 migrations 下会生成迁移文件,记录具体的迁移动作
# 每次迁移动作都会有一个迁移文件,对上一个迁移文件有依赖
python manage.py migrate
# 在数据库中 django_migrations 表中,会有已完成迁移的记录
# 比对 django_migrations 和 现有的迁移文件,对未完成迁移的迁移文件进行处理
# 每完成一个迁移,就记录一条

# --- 出错了 ---
# 已经迁移成功的会记录在 django_migrations 中
# 没有成功的这一条可能执行了一半,对数据库已经产生了影响
# 但是 django_migrations 中不会记录,所以就可能导致反复出错

Specified key was too long

问题1071, 'Specified key was too long; max key length is 767 bytes'
解决:最常见的问题是数据库使用了 UTF8MB4 编码,可以设置数据库或者 table 的编码为 UTF8

# 设置数据库
alter database name character set utf8;
# 设置表
alter table name character set utf8;
# 设置字段
alter table name modify column varchar(50) CHARACTER SET utf8;

如果是索引太长,可以

set global innodb_large_prefix=on;
set global innodb_file_format=Barracuda;

Duplicate key name 或 Create 失败

通常是某个迁移文件失败了,这个迁移文件执行了一部分,其中包含了增加字段或创建表的操作,因此重复执行就会出错。
需要检查这个迁移文件中相关操作,对数据库中已经进行的操作进行逆操作。

数据库被误删了,怎么恢复

如果是某个应用下的数据库被误删了,最简单的方法是先把 django_migrations 表中的相关迁移记录删除,这个应用相关的数据库可以考虑直接删除,再进行一次 python manage.py migrate,当然这也意味着这个应用下的所有数据会丢失

不小心删除了迁移文件,数据库都还在怎么办

那就只能“假装”迁移:
那还是 python manage.py makemigrations 生成一下迁移文件,然后 python manage.py migrate --fake

我想从头开始

没问题

  • 把 migrations 文件夹下除了 __init__.py 文件外全部删除
  • django_migrations 数据库中的相关记录全部删除
  • 把所有相关已经创建的数据库删除
  • python manage.py makemigrationspython manage.py migrate 重新跑一边

遇到陈年老项目死活搞不定怎么办

参考“我想从头开始”文章来源地址https://www.toymoban.com/news/detail-418750.html

到了这里,关于Django 数据库迁移反复出错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django中级指南:理解并实现Django的模型和数据库迁移

    Django 是一个极其强大的 Python Web 框架,它提供了许多工具和特性,能够帮助我们更快速、更便捷地构建 Web 应用。在本文中,我们将会关注 Django 中的模型(Models)和数据库迁移(Database Migrations)这两个核心概念。 在 Django 中,模型是一种特殊的对象,它对应数据库中的一张

    2024年02月13日
    浏览(31)
  • python+django迁移数据库成功但是数据库中还没表产生

    1、删除原来的文件(我这没了,反正就是之前执行下面两条命令生成的文件) 2、检查settings.py中DATABASES参数,首先是数据库的信息对不对。我这里是因为ENGINE=“django.db.backends.sqlite3” 因为我使用的数据库是mysql,所以修改成“django.db.backends.mysql”就好了,就这搞了一天,真

    2024年02月11日
    浏览(54)
  • Django的数据库模型迁移命令makemigrations和migrate是否会导致数据库中的数据丢失?

    我们知道,如果在Django的文件models.py中写好了数据库模型,要生成对应的数据库,需要执行下面两条命令: 其中命令 makemigrations 是生成迁移执行文件,命令 migrate 是执行迁移命令。 那么如果修改了数据库模型文件models.py的内容,比如新增了一张表,那么是否会造成原来数据

    2024年02月12日
    浏览(38)
  • Django创建应用、ORM的进阶使用及模型类数据库迁移

    Django 项目就是基于 Django 框架开发的 Web 应用,它包含了一组配置和多个应用,我们把应用称之为 App,在前文中对它也做了相应的介绍,比如 auth、admin,它们都属于 APP。 一个 App 就是一个 Python 包,通常一个 App 可以包含模型、视图、模板和 URL 配置文件,可以被应用到多个

    2024年02月09日
    浏览(40)
  • SQL server附加数据库时出错,提示说: 附加数据库时出错。有关详细信息,请单击“消息”列中的超链接

            其中一种解决办法:可能是数据库权限不够,要 把.MDF和.LDF两个数据库文件都打开权限          要记得 把同名的需要重新配置的文件删除之后重新附加 !!         操作步骤如下:         对于.MDF文件:右键,点击“属性”         点击“安全”      

    2024年01月18日
    浏览(50)
  • dedecms数据库文件出错的修复方法

    今天在学习织梦dedecms数据库文件相关操作时,不知道什么原因,发现一个文件出错,为了修复这个文件,确实下了一些功夫,终于找到两个操作方法,发出来,供大家学习。 出错表名: dede_archives 出错提示: Can’t open file: ‘dede_archives.MYI’. (errno: 145) – Execute Query False! Se

    2024年02月03日
    浏览(26)
  • 【数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践

    在之前这一篇中我们分享过使用chameleon工具完成MySQL到openGauss的全量数据复制、实时在线复制。9.30新发布的openGauss 3.1.0版本 ,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、触发器、自定义函数、存储过程的迁移。 本篇就来分享一下使用c

    2024年02月02日
    浏览(48)
  • 数据库迁移之mysql到达梦数据库

    由于业务需求要求数据库国产化,因此将数据从mysql数据库中迁移到国产达梦数据库中。将mysql中的每个库迁移到达梦不同模式下,下面为详细过程。 (1)安装达梦客户端工具 (2)点击选择DM管理工具 (3)创建模式和用户 在用户菜单中,新建一个TEST模式以及相应的用户。

    2024年02月08日
    浏览(49)
  • mysql数据库迁移

    公司有个项目,刚开始数据量不是大的时候,数据库和服务上的所有应用数据都放在一个旧小盘中,随着项目数据的增长,旧的磁盘被占满了,导致系统无法写入数据,我和同事排查了很长时间,最终确定是磁盘被占满导致的一系列连锁问题。问题找到了,接下来就是想办法

    2024年02月14日
    浏览(37)
  • mysql数据库数据如何迁移目录

    默认位置 C:ProgramDataMySQLMySQL Server 8.0 步骤2中Data文件夹就是mysql存放数据的位置 这里举例移动到E盘下 原来my.ini文件不要修改文件位置,如果修改需要另行学习

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包