【问题标题】:How to return queryset instead of list from Django model manager with custom SQL如何使用自定义 SQL 从 Django 模型管理器返回查询集而不是列表
【发布时间】:2021-01-13 03:49:56
【问题描述】:

我正在处理 Django orm 不支持的遗留数据源和驱动程序。我只能通过 pyodbc 使用他们专有的 odbc 驱动程序提交查询。我的解决方法是通过模型管理器的 pyodbc 提交自定义 sql。该技术(受 Django 文档启发)返回一个列表,而不是一个查询集。在我使用需要查询集的包之前,这很有效。

如何将结果列表转换为查询集?有没有办法将结果注入查询集中?

class MyManager(models.Manager):
    def getdata(self):
        con_string = 'DSN=myOdbcDsn;UID=id;PWD=pass'
        conn=pyodbc.connect(con_string)
        cursor=conn.cursor()
        result_list = []
        try:
            sql = "select distinct coalesce(WORKCENTER_GROUP, 'na') workcenterGroup, WORKCENTER_CODE workcenterCode FROM Workcenter"
            cursor.execute(sql)
            for row in cursor.fetchall():
                p = self.model(workcenterGroup=row[0], workcenterCode=row[1])
                result_list.append(p)
        except pyodbc.Error as ex:
            print("----------------ERROR %s: %s" % (ex.args[0], ex.args[1]))
        conn.close()
        return result_list

class ProdTrends2(models.Model):
    workcenterGroup=models.CharField("Group", max_length=100)
    workcenterCode=models.CharField("Code", max_length=100)
    objects=MyManager()

【问题讨论】:

  • 可以分享一下型号代码吗?
  • 已更新模型

标签: django django-models django-queryset


【解决方案1】:

调用set(result_list) 应该足以满足需要查询集的包。

【讨论】:

  • 这仍然会引发错误,因为“set”类型没有查询集的所有方法和属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
相关资源
最近更新 更多