Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 将迁移应用于真正不同步的数据库_Django_Database Migration_Django South_Django 1.6 - Fatal编程技术网

Django 将迁移应用于真正不同步的数据库

Django 将迁移应用于真正不同步的数据库,django,database-migration,django-south,django-1.6,Django,Database Migration,Django South,Django 1.6,我继承了一个状态非常糟糕的数据库。基本上如下: 大多数应用程序没有迁移文件夹,或者没有过时的文件夹 南方迁移历史记录表与数据库不同步 数据库表与Django中的当前模型不匹配(尽管我知道模型和表之间发生了什么变化) 我不担心保存过去的迁移历史或类似的东西,但我确实需要保存数据库中当前的数据。我在寻找一种方法,将当前数据库状态声明为初始状态,并从那里继续前进。如果有必要,我可以修改模型,使数据库表与当前模型匹配,因为我认为这是启动所必需的 我已经胡闹了好几个小时了,如果你能给我一些建议来解决这

我继承了一个状态非常糟糕的数据库。基本上如下:

  • 大多数应用程序没有迁移文件夹,或者没有过时的文件夹
  • 南方迁移历史记录表与数据库不同步
  • 数据库表与Django中的当前模型不匹配(尽管我知道模型和表之间发生了什么变化)
我不担心保存过去的迁移历史或类似的东西,但我确实需要保存数据库中当前的数据。我在寻找一种方法,将当前数据库状态声明为初始状态,并从那里继续前进。如果有必要,我可以修改模型,使数据库表与当前模型匹配,因为我认为这是启动所必需的

我已经胡闹了好几个小时了,如果你能给我一些建议来解决这个问题,我将不胜感激

补充说明:

  • 数据库正在使用sqlite
  • 转移到Django 1.8是可能的,但不是几个月

关于django 1.6和South的说明

我建议下载一个数据库转储(或在模式中),并使用sqllite在本地机器上创建一个新的数据库

然后删除所有应用程序中所有现有的
/migrations
文件夹 然后删除数据库表中的所有内容
south\u migrations

现在禁用数据库中没有的所有“新”模型更改

然后再次进行初始迁移

/manage.py schemamigration myapp--初始值

然后假装一切,因为结构已经存在了
/manage.py migrate--false

现在,您的迁移与生产数据库同步

现在重新启用新的模型更改,然后创建迁移每个应用程序
/manage.py模式迁移myapp

然后迁移到新的更改
/manage.py迁移

注意:在服务器和开发人员计算机上,您需要确保在创建任何新迁移之前,还删除了“migrations”文件夹中的所有旧.pyc文件


根据上面的E4C5的注释,当你移动到Django 1.7/1.8时(当南方在1.7中被集成到Django)时,你将不得不再次执行这些步骤,所以你可能需要同时考虑升级到1.7(虽然这不一定是微不足道的升级…)。现在是把它提出来的时候了。请放心,从南方迁移到django会带来一些它自己的问题(尽管不应该这样)。如果您现在不进行切换,您将面临两场战斗,而不是一场将您的模型与当前数据库状态匹配,然后删除/重新创建迁移的战斗。实体应该简化我们的开发过程,而不是产生一整套新的问题。对于一家大型企业,您可能已经创建了数据库,但它现在属于数据库管理员,更新和维护是在未经您许可的情况下完成的。迁移现在变得毫无用处,必须首先进行。因此,我的数据库开发分为两个独立的项目。一个用于项目创建时的迁移,另一个用于数据库优先和应用程序使用。这样可以避免类似的问题,然后我所做的就是在DB 1st项目中重新创建实体。然而,我的项目是.Net