当前位置: 首页 > 面试题库 >

Django 1.8:为现有架构创建初始迁移

邬博涉
2023-03-14
问题内容

我开始了一个使用迁移系统的django 1.8项目。
事情变得一团糟,所以我从数据库中删除了迁移文件夹和表,现在我试图重建它们,但没有成功。

我有三个应用程序(3个models.py文件),这些模型完全反映了表格!

到目前为止,我发现的最佳方法是:

  1. 删除所有migrations文件夹。做完了!
  2. django_migrations表中删除所有内容。做完了!
  3. python manage.py makemigrations --empty <app>为每个应用程序运行。做完了!
  4. 运行python manage.py migrate --fake。做完了!(尽管只有在每个makemigrations命令之后都运行它,它才有效。
    现在,我添加一个新字段,运行makemigrations命令,并且收到以下错误:
    django.db.utils.OperationalError: (1054, "Unknown column 'accounts_plan.max_item_size' in 'field list'")

我在这件事上花了HOURS。我如何初始化迁移,以便每次都能继续工作而不会中断迁移?

为什么这么复杂?为什么没有一个简单的单线:initiate_migrations_from_schema

编辑:
现在事情变得更糟了。我删节了django_migrations表并删除了所有migrations文件夹。
现在,我尝试运行python manage.py migrate --fake-initial(在DEV文档中找到的东西),只是这样就设置了Django的所有“内部”应用程序(身份验证,会话等),并且得到了:
(1054, "Unknown column 'name' in 'django_content_type'")。
现在,该“列”不是真实的列。这是@propertyDjango contenttypes应用程序中定义的。这里发生了什么?为什么将name属性标识为真实列?


问题答案:

终于让它工作了,尽管我不知道为什么,但我希望它将来能工作。
经过无数次尝试并经过Django的开发站点(链接)。
这是步骤(针对遇到此问题的人员):

  1. 清空django_migrations表格:delete from django_migrations;
  2. 对于每个应用程序,删除其migrations文件夹:rm -rf <app>/migrations/
  3. 重置“内置”应用的迁移: python manage.py migrate --fake
  4. 对于每个运行的应用:python manage.py makemigrations <app>。注意相关性(带有ForeignKey的模型应在其父模型之后运行)。
  5. 最后: python manage.py migrate --fake-initial
    在那之后,我运行了没有--fake-initial标志的最后一个命令,只是为了确保。

现在一切正常,我可以正常使用迁移系统。

我确定我不是唯一遇到此问题的人。必须对其进行更好的记录,甚至简化。

针对Django 1.9用户的更新:
我再次使用Django 1.9.4遇到这种情况,而第5步失败。
所有我必须做的是替换--fake-initial--fake,以使其正常工作。



 类似资料:
  • 问题内容: 我正在寻找构建表示已经存在的公司数据库的dockerfile。同样,我想创建一个从还原psql转储开始的docker文件。 我在目录中。 我认为这样做就足够了。我想避免使用脚本的解决方案。 我使用template0,因为psql文档说您需要与原始数据库中创建的用户相同,并且需要在还原之前使用template0创建数据库。 但是,这给了我一个错误: 我还在整个应用程序中使用docker

  • 问题内容: 我已经学习了一个星期左右的时间来使用EF,并且一直困扰于创建/更新数据库的问题。如果数据库不存在,我可以创建一个初始化器来创建数据库: 或者我可以创建一个配置来迁移数据库 每个都可以正常工作,但我还没有想办法做到这两个。我可以通过更改SetInitializer调用在两个初始值设定项之间进行切换,但是如果我想创建数据库(如果该数据库不存在的话),并且还要迁移它(如果这样做的话)呢?我需

  • 我使用FFMPEG-segment对桌面上的视频捕获进行分段,并通过网络发送它们,以便提供给客户,并使用dash.js播放。问题是播放器正在搜索初始化段,而我似乎不知道如何创建它。 我使用以下ffmpeg命令创建段: 我为流创建的清单如下所示: 播放机调试模式打印以下内容: 如何为生成的段创建初始化段?我似乎无法让它起作用。

  • 场景: < li >具有一个架构的现有数据库,即< code>transport架构。 < li>2个迁移文件,其中版本1是初始/基本版本。版本2向< code>management模式中添加了一个表(但没有创建该模式,我希望FlyWay来创建)。 使用FlyWay API(在Java应用程序中) 迁移版本2失败,因为尚未创建模式。这在干净的数据库上按预期成功。 我在通过maven插件执行迁移时遇

  • 我有一个使用Spring Boot的中等规模项目,我正在尝试使用嵌入式H2创建我的第一个DataJpaTest,但我遇到了以下例外: 我已经尝试了这一点,并使用了一个模式。sql,还有这个和使用测试。测试/资源中的属性,以及其他答案。但什么都没用。我真的很困惑;这是我第一次在Spring Boot中遇到无法解决的问题。 我的实体类定义为: 关于如何强制Hibernate在H2中创建模式的任何建议?

  • 问题内容: 众所周知,Java总是在创建时初始化数组。即总是返回一个所有元素= 0的数组。我知道这对于对象数组是必须的,但是对于原始数组(可能是布尔型),在大多数情况下,我们并不关心初始值。 有人知道避免这种初始化的方法吗? 问题答案: 我已经做了一些调查。没有合法的方法在Java中创建未初始化的数组。甚至JNI NewXxxArray也会创建初始化的数组。因此,不可能确切知道数组清零的成本。尽管