Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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_Django Migrations - Fatal编程技术网

Python Django中迁移的执行顺序

Python Django中迁移的执行顺序,python,django,django-migrations,Python,Django,Django Migrations,我试图理解Django在将迁移应用于数据库时是如何处理迁移的 特别是,假设我正在查看此应用程序: 我在每个迁移文件中插入了一个断点,如下所示: def break_function(apps, schema_editor): print("Entered break_function() 0007") breakpoint() ... migrations.RunPython(break_function), 在运行测试时,我得到了以下信息(Django尝试构

我试图理解Django在将迁移应用于数据库时是如何处理迁移的

特别是,假设我正在查看此应用程序:

我在每个迁移文件中插入了一个断点,如下所示:

def break_function(apps, schema_editor):
    print("Entered break_function() 0007")
    breakpoint()
    ...
 migrations.RunPython(break_function),   
在运行测试时,我得到了以下信息(Django尝试构建一个全新的数据库进行测试,并应用所有迁移来实现此目的)

我想知道的是执行的顺序。为什么是这个订单而不是其他订单

我可以看到
0001_initial
的逻辑是第一个(基于名称)。之后,它是否只是按照文件命名中指定的顺序

依赖项中列出某个迁移是否会使Django在当前迁移之前预先运行它

或者,
dependencies
部分只是声明性的,旨在防止数据库状态不一致


另外,Django在运行测试时如何销毁现有数据库,是否有特定的顺序或方式?它是否以相反(或其他)的顺序应用迁移

初始迁移的Initial=True,并首先应用它

初始迁移用Initial=True类属性标记 关于迁移类。如果未找到初始类属性,则 如果是第一次迁移,迁移将被视为“初始” 应用程序(即,如果它不依赖于应用程序中的任何其他迁移) 相同的应用程序)

所有其他迁移都至少依赖于一个应在迁移之前应用的迁移

如果有另一个应用程序的外键,Django还将在依赖项中包含以下应用程序当前状态迁移

作为

依赖项,此依赖项所依赖的迁移列表


运行测试会重新创建数据库(无需降级数据库,只需将其删除并重新创建即可)

初始迁移的初始值为Initial=True,并首先应用它

初始迁移用Initial=True类属性标记 关于迁移类。如果未找到初始类属性,则 如果是第一次迁移,迁移将被视为“初始” 应用程序(即,如果它不依赖于应用程序中的任何其他迁移) 相同的应用程序)

所有其他迁移都至少依赖于一个应在迁移之前应用的迁移

如果有另一个应用程序的外键,Django还将在依赖项中包含以下应用程序当前状态迁移

作为

依赖项,此依赖项所依赖的迁移列表


运行测试会重新创建数据库(无需降级数据库,只需将其删除并重新创建即可)

我自己也经常想知道这一点,因此感谢您发布此问题,因为它迫使我仔细阅读Django文档

根据文档,文件中的数字仅供开发人员参考。Django使用每个迁移文件中的dependencies部分来确定何时实际运行迁移。因此,基本上,当您执行migrate命令时,Django将收集项目中的所有迁移文件,并使用每个迁移文件中的依赖项,以适当的顺序执行数据库修改

下面列出了完整的文档,供您阅读:

我自己也经常想知道这个问题,所以谢谢你发布这个问题,因为它迫使我仔细阅读Django文档

根据文档,文件中的数字仅供开发人员参考。Django使用每个迁移文件中的dependencies部分来确定何时实际运行迁移。因此,基本上,当您执行migrate命令时,Django将收集项目中的所有迁移文件,并使用每个迁移文件中的依赖项,以适当的顺序执行数据库修改

下面列出了完整的文档,供您阅读:

Creating test database for alias 'extra'...
Entered break_function() 0001
--Return--
> /home/user/sites/aldryn-people/aldryn_people/migrations/0001_initial.py(14)break_function()->No
ne                                                                                                    
-> breakpoint()
(Pdb) c
Entered break_function() 0002
--Return--
> /home/user/sites/aldryn-people/aldryn_people/migrations/0002_auto_20150128_1411.py(8)break_func
tion()->None                                                                                          
-> breakpoint()
(Pdb) c
Entered break_function() 0003
--Return--
> /home/user/sites/aldryn-people/aldryn_people/migrations/0003_auto_20150425_2103.py(9)break_func
tion()->None                                                                                          
-> breakpoint()
(Pdb) c
Entered break_function() 0004
--Return--
> /home/user/sites/aldryn-people/aldryn_people/migrations/0004_auto_20150622_1606.py(8)break_func
tion()->None                                                                                          
-> breakpoint()
(Pdb) c
Entered break_function() 0005
--Return--
> /home/user/sites/aldryn-people/aldryn_people/migrations/0005_auto_20150723_1508.py(10)break_fun
ction()->None                                                                                         
-> breakpoint()
(Pdb) c
Entered break_function() 0006
--Return--
> /home/user/sites/aldryn-people/aldryn_people/migrations/0006_person_groups.py(9)break_function(
)->None                                                                                               
-> breakpoint()
(Pdb) c
Entered break_function() 0007
--Return--
> /home/user/sites/aldryn-people/aldryn_people/migrations/0007_copy_group.py(8)break_function()->
None                                                                                                  
-> breakpoint()
(Pdb) c