Jam*_*ell 6 python migration django postgresql
我对Django非常有信心,但直到最近才主要依赖生成的迁移.我写了一个小的自定义迁移,在我的CI开始抱怨超时后不久,它最终说明它与Django在部署期间的迁移有关.
起初,我能够解决这个问题,但我不知道我做了什么(如果有的话)修复它.这个问题似乎与我为特定迁移输入的一些自定义代码有关.这就是我所知道的:
输出如下(应用程序名称已删除):
[web@dev myapp]$ ./manage.py migrate
Operations to perform:
Apply all migrations: myapp1, myapp2, myapp3, myapp4
Running migrations:
Killed
Run Code Online (Sandbox Code Playgroud)
RunPythonPython函数在删除其中一个字段之前复制两个字段之间的数据.该文档不鼓励将其用于PostgreSQL,但是有更好的方法吗?options).代码检查布尔值是否为true并为字符字段设置正确的值.我做了两次.第一次最终结束了工作,但我还没有在另一个数据库上测试它. 这是迁移(已删除的应用程序名称):
from __future__ import unicode_literals
from django.db import migrations
def fix_consulting(apps, schema_editor):
my_model = apps.get_model("myapp", "MyModel")
for m in my_model._default_manager.all():
if m.consulting:
m.detail = "CONSLT"
m.save()
class Migration(migrations.Migration):
dependencies = [
('myapp', '0024_auto_20160117_1113'),
]
operations = [
migrations.RunPython(fix_consulting,atomic=False),
]
Run Code Online (Sandbox Code Playgroud)
我的想法:
也许我在这里写的代码运行时间太长了?数据库中不到一百个模型,所以我不知道为什么fix_consulting函数需要这么长时间.
如果我在开头添加print语句fix_consulting,它们有时只会运行,并且会被杀死.就目前而言,我已经跑了6-8次并且每次都被杀死,但是在不同的点上
其他信息: - 使用Django 1.9 - 使用PostgreSQL 9.4.4 - 错误主要发生在CentOS上,但也发生在OSX上
我相信您的问题是由于在使用时可能需要缓存的数据量引起的,all因为这会返回对象的所有实例,因此您可以在返回对象之前在数据库级别上进行过滤,因为您只需要更改您也可以在数据库级别上执行该字段的值.总而言之,这会将您的代码更改为以下内容.
def fix_consulting(apps, schema_editor):
my_model = apps.get_model("myapp", "MyModel")
my_model._default_manager.filter(consulting=True).update(detail="CONSLT")
Run Code Online (Sandbox Code Playgroud)
这将内存管理职责放在数据库上,这似乎解决了您的问题.
继续前进,我建议尝试始终将从db返回的内容过滤到实际需要的内容(通过拼接或过滤)
| 归档时间: |
|
| 查看次数: |
2246 次 |
| 最近记录: |