98.orm迁移详解,makemigrations,migrate

guyan-2020 guyan-2020     2023-04-20     595

关键词:

ORM模型迁移

迁移命令:

1、makemigrations:将模型生成迁移脚本。模型所在的app,必须放在settings.py中的INSTALLED_APPS中,这个命令有以下几个常用的选项:

  • app_label : 后面可以跟一个或者是多个app,那么就只会针对这几个app生成迁移脚本,如果没有任何的app_label,那么会检查INSTALLED_APPS中所有的app下的模型,针对每一个app都生成相应的迁移脚本。
  • --name : 给这个迁移脚本指定一个名字。
  • --empty : 生成一个空的迁移脚本文件,可以使用这个命令来实现一个空的文件,然后自己在文件中写迁移脚本。

    2.migrate:将生成的迁移脚本。映射到数据库中。创建新的表或者修改表的结构,以下是一些常用的选项:

  • app_label : 将某个app的迁移脚本映射到数据库中,如果没有指定,那么会将在所有的安装在INSTALLED_APPS中的app都映射到数据库中。
  • app_label migrationsname : 将某个app下指定的名字的migration文件映射到数据库中。
  • --fake : 可以将指定的迁移脚本名字添加到数据库中,但是并不会把迁移脚本转换为sql语句,修改数据库中的表。
  • --fake-initial : 将第一次生成的迁移文件版本号记录在数据库中,但并不会真正的执行迁移脚本。

    migrate怎么判断哪些迁移脚本需要执行:

  • 会将代码中的迁移脚本与数据库中的“django_migrations”中的迁移脚本进行对比,如果发现数据库中,没有这个迁移脚本,那么就会执行这个迁移脚本。

    migrate做了什么事情:

  • [1] 将相关的迁移脚本翻译成sql语句,在数据库中执行这个sql语句。
  • [2]如果这个sql语句执行没有问题,就会将这个迁移脚本的名字记录到“django_migrations”中。

    3. showmigrations : 查看某个app下的迁移文件。如果后面没有app,那么将会查看INSTALLED_APPS中所有的迁移文件。

    4.sqlmigrate :查看某个迁移文件在映射到数据库中的时候,转换的sql语句。

    migrations中的迁移脚本和数据库中的迁移脚本对不上怎么办?

    解决办法:

    1. 使用 --fake参数:

    首先对比数据库中的迁移脚本和代码中的迁移脚本,然后找到不同的迁移脚本文件,之后在使用“--fake” ,将代码中的迁移脚本添加到“django_migrations”中,但是并不会执行sql语句。这样就可以避免每次执行“migrate”中,但是并不会执行sql语句,这样就可以避免每次执行“migrate”的时候,都执行一些重复的迁移脚本。
终极解决方案:如果代码中的迁移脚本和数据库中的迁移脚本

实在是太多了,就是搞不清,那么这时候就可以使用终极解决方案:

  • [1]终极解决方案原理:就是将之前的那些迁移脚本都不用了。重新来过。要将出问题的app下的所有模型和数据库表中保持一致,重新映射。
  • [2]将出问题的app下的所有模型,都和数据库中的表保持一致。
  • [3]将出问题的app下的所有迁移脚本文件都删除掉。再在
    “django_migrations”表中将出问题的app相关的迁移记录都删掉。
  • [4]使用“makemigrations”,重新将模型生成一个迁移脚本。
  • [5]使用“migrate --fake-initial”参数,将刚刚生成的迁移脚本,标记为已经完成(因为这些模型相对应的表,其实都已经在数据库中存在了,不需要重新执行了。)

Django 1.7 - makemigrations 为非托管模型创建迁移

】Django1.7-makemigrations为非托管模型创建迁移【英文标题】:Django1.7-makemigrationscreatingmigrationforunmanagedmodel【发布时间】:2014-12-2406:27:03【问题描述】:我正在我的应用程序中创建一些动态Django模型,除了迁移系统之外,一切似乎... 查看详情

Django - 迁移命令说该表在执行第二次 makemigrations 后存在

】Django-迁移命令说该表在执行第二次makemigrations后存在【英文标题】:Django-Migratecommandsaysthattableexistsaftersecondmakemigrationswasexecuted【发布时间】:2015-12-0816:37:28【问题描述】:我有一个带有相关字段设置的模型。我运行manage.pymigra... 查看详情

在创建新类 Airport 并在 makemigrations 引发 IntegrityError 后迁移它时对航班进行一些更改之后

】在创建新类Airport并在makemigrations引发IntegrityError后迁移它时对航班进行一些更改之后【英文标题】:AftercreatinganewclassAirportandmakesomechangesinflightswhenimigrateitaftermakemigrationsthrowsIntegrityError【发布时间】:2021-03-0215:05:39【问题描述】... 查看详情

django makemigrations 和 heroku 服务器上的迁移不创建表

】djangomakemigrations和heroku服务器上的迁移不创建表【英文标题】:djangomakemigrationsandmigrateonherokuserverdon\'tcreatetables【发布时间】:2016-11-1418:53:31【问题描述】:Python2.7版Django版本1.9.7我在heroku上创建了一个Django应用程序。我无法将... 查看详情

makemigrations 和升级到 Django 1.7 的问题

】makemigrations和升级到Django1.7的问题【英文标题】:IssueswithmakemigrationsandupgradingtoDjango1.7【发布时间】:2015-05-1211:57:08【问题描述】:我的团队有一个项目在Django1.6上与South一起运行,我们刚刚升级到1.7。我按照指南,清除了旧的... 查看详情

django heroku makemigrations 忽略模型的变化

】djangoherokumakemigrations忽略模型的变化【英文标题】:djangoherokumakemigrationsignoringchangesinmodels【发布时间】:2017-09-2702:58:23【问题描述】:我从models.py中删除了两个模型,当我运行makemigrations并在本地迁移时,一切都很好。当我在H... 查看详情

makemigrations 忽略所有领域 (DJANGO)

】makemigrations忽略所有领域(DJANGO)【英文标题】:makemigrationsignoringallthefields(DJANGO)【发布时间】:2021-12-2020:00:06【问题描述】:正如标题所说,有一个我无法解决的问题,那就是当我迁移我的admin_db应用程序时,它只是忽略了所有... 查看详情

makemigrations 无法检测到 django 中的变化

】makemigrations无法检测到django中的变化【英文标题】:makemigrationscan\'tdetectchangeindjango【发布时间】:2022-01-1515:57:48【问题描述】:我知道有很多类似的问题:但我会尽可能简单地描述我的问题。这是我要迁移的应用程序。这是我... 查看详情

Django Makemigrations 和 Migrate 不断重复

】DjangoMakemigrations和Migrate不断重复【英文标题】:DjangoMakemigrationsandMigratekeeprepeating【发布时间】:2020-05-0802:31:24【问题描述】:我的django应用程序似乎发生了一些事情。有两种模型,一种是我修改的,另一种是新添加的。自从... 查看详情

我应该对我的所有应用程序运行 Django“makemigrations”吗?

】我应该对我的所有应用程序运行Django“makemigrations”吗?【英文标题】:ShouldIrunDjango"makemigrations"againstallofmyapps?【发布时间】:2015-12-1920:06:24【问题描述】:我刚刚将我的项目升级到Django1.8.4。我以前从未在这个项目中... 查看详情

Django 迁移问题

...次对模型进行任何更改时,我都需要先执行“pythonmanage.pymakemigrations”然后执行“pythonmanage.pymigrate”makemigrations将在迁移文件夹下创建新文件:0001_xx0002_xx0003_xx...我的问 查看详情

Django:添加整数字段后在应用程序上运行 makemigrations 时出现“未知列”

】Django:添加整数字段后在应用程序上运行makemigrations时出现“未知列”【英文标题】:Django:"UnknownColumn"whenrunmakemigrationsonanappafteraddinganIntegerField【发布时间】:2015-11-2817:03:17【问题描述】:首先,我最近从Django1.6升级到... 查看详情

如何忽略生产中的一些迁移

...,当我在本地使用空数据库运行时,我的本地Django迁移和makemigrations命令将生成正确的迁移。例如,此迁移将生成:classMigration(migrations.Migration):dependencies=[(\ 查看详情

Django迁移错误表已经存在

...,我只有一个名为001_initial的迁移文件.....它包含我执行makemigrations时创建的所有createtable(sql)djangomakemigrations,例如5个表[1,2,3,4,5]我的数据库中已经有first( 查看详情

PyCharm 中的 Django 迁移

】PyCharm中的Django迁移【英文标题】:DjangomakemigrationsinPyCharm【发布时间】:2015-11-0406:38:28【问题描述】:当我向我的模型添加没有默认值的新字段时some_field=models.IntegerField()然后运行​​makemigrations我收到这条消息`Youaretryingtoaddan... 查看详情

重置长时间的 Django 迁移

...:2016-11-1104:30:28【问题描述】:随着项目的发展,迁移(makemigrations和migrate)都需要越来越长的时间,每次部署都会延迟很多。Django让您转到squashthem,因此您没有很长的迁移文件列表,但迁移需要相同的时间。然后我尝试了以下... 查看详情

在 django 上进行迁移后无法迁移

...django上进行迁移后无法迁移【英文标题】:Can\'tmigrateaftermakemigrationsondjango【发布时间】:2021-06-2718:56:47【问题描述】:每个人。我是这个领域的新手。所以,在我完成了makemigrations之后。然后我迁移出现此错误代码。我尝试解决... 查看详情

如何从命令行列出应用的迁移? [复制]

...发布时间】:2018-10-1516:36:12【问题描述】:我已经运行了makemigrations,然后migrate应用迁移pythonmanage.pyshowmigrationsadmin[X]0001_initial[X]0002_logentry_remove_au 查看详情