在南迁移中使用聚合器(最小值、最大值、平均值)

2024-04-25 06:03:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我想执行annotate/aggregate内部迁移,因为我的数据需要在修改架构之前准备好。South不允许从django.db.models导入聚合器-它在迁移应用程序阶段抛出错误。那么在南方有什么办法吗?在


Tags: 数据django应用程序dbmodels架构错误阶段
1条回答
网友
1楼 · 发布于 2024-04-25 06:03:13

这是一种最坏的情况,但是一种选择是让South直接为您执行SQL。在

从他们的文档中:https://south.readthedocs.org/en/latest/databaseapi.html#db-execute

获取SQL查询有时会很痛苦,但是您可以让Django从您的Model.objects.filter().blahblah.blah语句中将它提供给您

合理的警告

直接处理这样的查询对象是不好的,所以请不要在部署的代码中这样做。在本例中,由于.aggregate()不返回查询集,因此在实际查询中获得查询集有点困难。也就是说,要从查询中获取SQL(假设分离整个内容有点容易),可以启动一个django-admin.py shell并执行如下操作

from django.db.models import Count
import MyModel

q = MyModel.objects.all().query
q.add_aggregate(Count('pk'), MyModel, 'name', is_summary=True)
print q

注释更容易

.annotate()直接返回一个查询集,这样您就不必再使用.add_aggregate()来混日子了。在

^{pr2}$

同时,在南方

从那里,您几乎可以将SQL剪切粘贴到一个字符串中,以便进行数据迁移,然后调用db.execute。其余的错误处理和回滚非常依赖于您的情况,但是为了安全起见,我强烈建议您编写一个回滚。在

相关问题 更多 >