【问题标题】:Django object.raw('query') doesnot return updated querysetDjango object.raw('query') 不返回更新的查询集
【发布时间】:2021-04-30 01:03:05
【问题描述】:
class view_name(viewsets.ModelViewSet):
    queryset = model_name.objects.raw('call stored_procedure();')
    serializer_class = model_name_Serializers
    permission_classes = [IsAuthenticated]

所以,当我执行上面的其余框架视图集时。它工作正常。 但是当我更新任何会影响存储过程的查询集的值时。

它仍然返回前一个查询集而不是更新的查询集。 然后我通过在我的数据库(mysql)中运行调用过程 sql 语句进行检查,它返回更新的查询集。

但是这个原始函数继续显示具有先前值的查询集。 它仅在重新启动本地主机服务器后返回更新的查询集。

【问题讨论】:

    标签: mysql django stored-procedures django-rest-framework


    【解决方案1】:

    我认为这种行为的原因是raw 在类构建期间执行查询。这是documentation 所说的:

    获取原始 SQL 查询,执行它,并返回一个 django.db.models.query.RawQuerySet 实例

    换句话说 - 您的查询在您启动项目时运行,而不是每次调用视图时。 除了queryset 类属性,您可以定义get_queryset 方法并将原始查询放在那里,这样每次您使用请求调用视图时都会调用它(并执行查询):

    def get_queryset(self):
        return model_name.objects.raw('call stored_procedure();')
    

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 2018-12-01
      • 1970-01-01
      相关资源
      最近更新 更多