在Django的迁移代码中,有一个squashmigrations命令:" 如果可能的话,将迁移压缩到更少的迁移,app_label包括migration_name更少的迁移."
所以,如果你想压缩前五次迁移,这将有所帮助.
从一个特定的壁球开始压制的最佳方法是migration_name什么?
在我目前正在开展的项目中,我们添加了5-10个新的迁移文件,因为我们添加了新功能.我们将立即部署整个项目,看起来单独运行这些将花费太长时间.我想将此项目的所有迁移压缩为单个迁移并测试运行时间.
我已经成为Django的用户大约2年了,并且有一个我一直害怕使用的功能:伪造迁移.
我几乎到处都看了,我能得到的最多信息来自文档,其中说明:
- 假
告诉Django将迁移标记为已应用或未应用,但没有实际运行SQL来更改数据库架构.
这适用于高级用户在手动应用更改时直接操作当前迁移状态; 请注意,使用--fake会冒着将迁移状态表置于需要手动恢复以使迁移正确运行的状态的风险.
--fake-初始
如果所有具有该迁移中所有CreateModel操作创建的模型名称的数据库表已存在,则允许Django跳过应用程序的初始迁移.此选项适用于首次针对预先存在使用迁移的数据库运行迁移时使用.但是,此选项不会检查匹配的表名称之外的匹配数据库模式,因此只有在您确信现有模式与初始迁移中记录的模式匹配时才可以安全使用.
我得到了一般的想法以及为什么人们想要使用这个功能.但是,我不明白它所说的部分仅适用于高级用户.
有人可以解释幕后发生的事情以及为什么需要手动恢复.
注意
我不是在寻找伪造迁移时运行的确切原始SQL查询.我只是在寻找关于场景背后发生的事情的一般概念,也许是为什么伪造迁移会导致状态makemigrations无法正常工作的一个例子.
我更改了 models.py:: 中的 CharField 之一
models.CharField(max_length=128, blank=True)
Run Code Online (Sandbox Code Playgroud)
进入 IntegerField -->
models.IntegerField(default=0)
Run Code Online (Sandbox Code Playgroud)
我有该字段的数据,主要是空字符串("")或整数作为字符串(例如"10":)。
所以我想在迁移时将这些字符串转换为整数。例如:: 如果空白字符串( "") 转换为0,否则转换为整数。
我怎样才能在执行./manage.py migrate命令时实现这一目标?
./manage.py makemigrations这是使用::创建的迁移文件
# Generated by Django 2.1.2 on 2018-10-25 04:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('dashboard', '0002_auto_20181024_1544'),
]
operations = [
migrations.AlterField(
model_name='aclpermissions',
name='ordering',
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name='submenus',
name='ordering',
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name='subsubmenus',
name='ordering',
field=models.IntegerField(default=0),
),
]
Run Code Online (Sandbox Code Playgroud)
当我运行时./manage.py migrate出现错误::
psycopg2.DataError: invalid input syntax for integer: …Run Code Online (Sandbox Code Playgroud) 我的数据库中有一个旧表。我想在 Django 应用程序中创建一个模型。创建模型后,我使用 migrate 命令,然后它创建了一个具有自己名称的新表。
我使用我的django迁移来迁移我的数据库.迁移之一是数据迁移.但我犯了一个错误(我没有保存模型)因此没有对数据进行任何更改.我更正了执行数据迁移的python代码的.py文件,并希望重新执行它.有没有办法回滚到以前版本的数据库或只是运行
./manage.py migrate my_app 0004
Run Code Online (Sandbox Code Playgroud)
用0004作为数据游戏的文件可以解决问题吗?