意外删除了迁移文件夹(Django 1.8)我有什么选择?

Deleted Migration folder (Django 1.8) by accident what are my options?

我不小心删除了一个迁移文件夹并且没有备份。

我有哪些选择?

数据库是postgres。现在一切正常。(我已经使用 SQL lite 移动了我的 DEV 服务器上的迁移文件夹)所以我只是在服务器上收到红色消息,表示并非所有迁移都已应用。

但下次如果我 运行 迁移我会遇到麻烦。

我的出路是什么?

迁移主要是为了向后兼容,tracking/versioning 的更改为 models/database。如果你真的不关心历史变化等等,那么你可以删除迁移目录并执行:

python manage.py makemigrations <app_name>

这会创建初始迁移(就像从一个干净的平板开始)- 并且向前移动,您可以跟踪向前移动的历史迁移。更多关于 this can be read here

现在,当您 运行 迁移时,您可以

python manage.py migrate <app_name> --fake-initial

伪造 initial migration.

现在可能是对您的应用程序进行版本控制的好时机

使用版本控制。

您不是第一个删除重要文件的开发人员,但通常恢复时间不到一秒 - 多亏了版本控制系统(也称为修订控制系统)。请停止一切​​并安装和使用 Git、Mercury 或 Subversion 之一。

不要使用 FTP

完全是。我的意思是完全没有安全感。始终使用 SFTP

不要将 sqlite3 与其他数据库一起用于本地生产

sqlite 不强制执行严格的类型检查。另一方面,Postgresql 对此非常讲究。此外,sqlite 仅具有 postgresql 上的一部分功能。最后但同样重要的是,不同的 RDBMS 具有不同的复杂性。如果您在本地使用一个而在生产环境中使用另一个,那么当您部署到现场时,您的代码总是有可能崩溃

在没有迁移文件的情况下进行管理

只要您的数据库与您的模型同步,这并不是什么大损失。

如果您的数据库与您的模型不同步,您可以使用

./manage.py inspectdb

重新创建代表数据库中实际结构的本地模型。然后你对生成的模型进行 makemigrations 和迁移(如 karthik 所解释的)。

然后将其替换为您的实时模型并再次执行该步骤。