Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用存储过程从Manager返回Djano Queryset_Python_Django_Django Models_Django Queryset_Rawsql - Fatal编程技术网

Python 使用存储过程从Manager返回Djano Queryset

Python 使用存储过程从Manager返回Djano Queryset,python,django,django-models,django-queryset,rawsql,Python,Django,Django Models,Django Queryset,Rawsql,我有一个运行存储过程的model.Manager,还有一个model.model来处理返回的数据。但是,当返回数据时,它不是作为queryset返回的,而是一个元组列表,我不能通过字段名引用它们。我希望将结果作为queryset返回 models.py class DashboardDetailManager(models.Manager): def dashboardDetail(self, from_date, to_date): from django.db imp

我有一个运行存储过程的
model.Manager
,还有一个
model.model
来处理返回的数据。但是,当返回数据时,它不是作为
queryset
返回的,而是一个元组列表,我不能通过字段名引用它们。我希望将结果作为
queryset
返回

models.py

class DashboardDetailManager(models.Manager):
    def dashboardDetail(self, from_date, to_date):
        from django.db import connections
        # AD 11/10/2020 updated sproc to return multiple sets for easier handling
        # was only returning the last set of expected results-->
        raw_sql = f"EXEC dbo.spGetDashDetailData @formFromDate = '{from_date}', @formToDate = '{to_date}'"
        with connections['ECS3'].cursor() as cursor:
            cursor.execute(raw_sql)
            detail_rows = []
            for row in cursor.fetchall():
                detail_rows.append(row)
            while cursor.nextset():
                for row in cursor.fetchall():
                    detail_rows.append(row)

        return detail_rows



class DashDetailData(models.Model):
    occurred = models.DateField(blank=True, null=True);
    severity = models.CharField(max_length=3, blank=True, null=True)
    batchid = models.CharField(max_length=255, blank=True, null=True);
    hrefkey = models.CharField(max_length=255, blank=True, null=True)
    email = models.EmailField(null=True, blank=True)
    id_cst = models.IntegerField(null=True, blank=True)
    docType =  models.CharField(max_length=255, blank=True, null=True);
    tpid =  models.CharField(max_length=255, blank=True, null=True);
    name_cst =  models.CharField(max_length=255, blank=True, null=True);
    message =  models.CharField(max_length=255, blank=True, null=True);
    attachment =  models.CharField(max_length=255, blank=True, null=True);
    bom_status =  models.CharField(max_length=255, blank=True, null=True);
    ack =  models.CharField(max_length=255, blank=True, null=True);
    bom_count = models.IntegerField(null=True, blank=True)
    objects = DashboardDetailManager()
views.py


detail\u rows=DashDetailData.objects.dashboardDetail('11-10-2020','11-20-2020')

我想您正在寻找。谢谢!我一直在阅读文档,直到我的眼睛交叉,但我似乎无法在脑海中整理它。我希望得到一个示例或代码片段,以便我能理解我需要什么。今天早上我重新阅读了它,按照我的理解,我不能将它用于存储过程执行来使用Manager.raw()您需要将id传递给select。问题是,您必须参与一个被亲切地称为“摆弄”的过程:尝试一些东西,看看结果是什么,调整它,或者抛弃这个想法,重新开始。存储过程本质上很难抽象,因为它们所做的事情“取决于过程”。Django提供的所有支持都是。因此,如果您真的想要一个queryset,您必须深入研究Django的内部结构,看看Django如何构建一个queryset。这在很大程度上是特定于引擎的。从内部来看,django.db.models.query.ModelIterable是一个神奇的东西。为了符合你的程序(“著名的临终遗言”),把它去掉看起来并不难。