Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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
Python 冻结数据库以测试Django中的新功能_Python_Django_Database_Version Control - Fatal编程技术网

Python 冻结数据库以测试Django中的新功能

Python 冻结数据库以测试Django中的新功能,python,django,database,version-control,Python,Django,Database,Version Control,在我的Django应用程序中,我想在现有模型中添加几个字段,并可能创建一个新类。我只想测试新功能,并批准它是否有效 我可以使用git轻松地还原代码。但是如果我进行makemigrations+migrate,那么我的MySQL数据库将发生更改,并且使用类似于django admin migrate[app_label][migration_name]的命令来逆转这些更改看起来像是手动删除表并恢复到旧状态(在某些情况下看起来非常麻烦,) 我想知道是否有安全的做法来尝试操作数据库并将其安全地恢复到初

在我的Django应用程序中,我想在现有模型中添加几个字段,并可能创建一个新类。我只想测试新功能,并批准它是否有效

我可以使用git轻松地还原代码。但是如果我进行
makemigrations
+
migrate
,那么我的MySQL数据库将发生更改,并且使用类似于
django admin migrate[app_label][migration_name]
的命令来逆转这些更改看起来像是手动删除表并恢复到旧状态(在某些情况下看起来非常麻烦,)

我想知道是否有安全的做法来尝试操作数据库并将其安全地恢复到初始状态

可能的解决方案#1:

您可以利用在使用时创建的:

需要数据库的测试(即模型测试)将不会使用 “真实”(生产)数据库。创建单独的空白数据库 为了测试

为您的项目创建一些单元测试并进行迁移(不迁移到生产数据库,只保留迁移)。然后:

如果数据库不存在,将首先创建它。任何 还将应用迁移以使其保持最新

通常,数据库在测试结束时会被销毁,但您可以在两次运行之间保留它:

您可以通过使用测试数据库来防止它们被破坏
test--keepdb
选项。这将在两个数据库之间保留测试数据库 跑步

使用此技巧,您可以在一个假数据库中测试您进行的每一次迁移,当您完成模型并完成所有迁移历史记录时,您可以在生产数据库上进行
migrate

可能解#2:

您可以按照@albar的建议复制数据库,并在进行新迁移时将其作为备份


尽可能多地分解数据,当设置完成后,用备份替换“损坏”的数据库,并对其应用迁移历史记录。

如果您只有模式迁移,您只需回滚迁移-您链接到的答案只是简单的废话,如果海报上的人不得不按照他所描述的那样做的话,他一定是把他的迁徙搞得一团糟。如果您也有数据迁移,那么显然需要注意使它们可逆(包括“向上”和“向下”迁移代码)。FWIW我已经这样做了很多年了(自从South正式上市以来),没有任何问题。从来不用“手动”删除任何东西,也不用弄乱我的迁移文件。这可能看起来很麻烦。但是它不会搞乱任何事情。为什么不简单地复制您的数据库呢?第一个解决方案部分是我正在寻找的。唯一棘手的部分是创建那些单元测试。这是一个麻烦,尤其是如果我决定不去改变。此外,据我所知,除了测试环境之外,我可能看不到它的影响。可能,我会使用第二种解决方案,但会为数据库寻找一种像
git revert
一样简单的方法。如果您创建了良好的单元测试,您可以在每次更改时检查项目的完整性(不仅是模型更改),这从长远来看确实很有帮助。