2024-04-25 06:03:13 发布
网友
我想执行annotate/aggregate内部迁移,因为我的数据需要在修改架构之前准备好。South不允许从django.db.models导入聚合器-它在迁移应用程序阶段抛出错误。那么在南方有什么办法吗?在
annotate
aggregate
django.db.models
这是一种最坏的情况,但是一种选择是让South直接为您执行SQL。在
从他们的文档中:https://south.readthedocs.org/en/latest/databaseapi.html#db-execute
获取SQL查询有时会很痛苦,但是您可以让Django从您的Model.objects.filter().blahblah.blah语句中将它提供给您
Model.objects.filter().blahblah.blah
直接处理这样的查询对象是不好的,所以请不要在部署的代码中这样做。在本例中,由于.aggregate()不返回查询集,因此在实际查询中获得查询集有点困难。也就是说,要从查询中获取SQL(假设分离整个内容有点容易),可以启动一个django-admin.py shell并执行如下操作
.aggregate()
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()来混日子了。在
.annotate()
.add_aggregate()
从那里,您几乎可以将SQL剪切粘贴到一个字符串中,以便进行数据迁移,然后调用db.execute。其余的错误处理和回滚非常依赖于您的情况,但是为了安全起见,我强烈建议您编写一个回滚。在
db.execute
这是一种最坏的情况,但是一种选择是让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
并执行如下操作注释更容易
^{pr2}$.annotate()
直接返回一个查询集,这样您就不必再使用.add_aggregate()
来混日子了。在同时,在南方
从那里,您几乎可以将SQL剪切粘贴到一个字符串中,以便进行数据迁移,然后调用
db.execute
。其余的错误处理和回滚非常依赖于您的情况,但是为了安全起见,我强烈建议您编写一个回滚。在相关问题 更多 >
编程相关推荐