【问题标题】:Django: run queries depending on SQL engineDjango:根据 SQL 引擎运行查询
【发布时间】:2011-01-17 09:08:40
【问题描述】:

在 Django 1.2.3 中,我需要执行一些纯 Django ORM 函数不可行的查询。例如

result = MyModel.objects.extra(select={'stddev': 'STDDEV_SAMP(value)'}).values()

但是,确实,我需要在多个 SQL 引擎(sqllite、MySQL 和 MSSQL)上运行此代码。所以,我应该测试settings.DATABASES['default']['engine'] 并运行特定于引擎的代码。

对于这个问题是否有更类似于 Django 的方法? (例如,用户定义的函数放在某个地方,以便 Django 根据默认数据库引擎运行它们)。

谢谢

【问题讨论】:

    标签: sql django django-models


    【解决方案1】:

    存储访问数据的代码的适当位置是模型层的方法中。这样,模型可以:

    • 具有环保意识
    • 构建自定义查询
    • 使用内置 ORM 函数

    这些可以交换、优化和调整,而无需更改应用程序的其余部分,因为应用程序的其余部分仅通过模型操作数据。

    【讨论】:

    • 同意。丢弃数据库中的 UDF,并用模型上的函数替换它们。
    • 该代码已经在一个方法中(它给出了它的实例值的标准偏差)。我正在寻找的是顶级结构,例如 Django 聚合函数 SumAvg,它们是独立于数据库的。
    • 我认为检查settings.DATABASES['default']['engine'] 很好。您想在不同的环境中运行不同的查询,但数据的接口将保持不变。在实现中有些杂乱的东西很好,我想不出另一种方法来在不同的环境中运行不同的代码(除了检查环境并做出相应的反应)。
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 2011-01-16
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多