【问题标题】:Django ORM vs PostgreSQL raw sqlDjango ORM 与 PostgreSQL 原始 sql
【发布时间】:2020-10-21 06:31:20
【问题描述】:

我的 django 应用程序在 服务器 1 上运行,该服务器连接到服务器 2 上的 Amazon RDS (PostgreSQL)。在日常工作中,我必须经常与数据库交互以写入/获取/查询数据。

目前,我在整个应用程序中遵循 django ORM 方式。我只是想知道如果我使用 PostgreSQL raw sql quereis using django.db connection cursor over ORM,性能是否会有任何改进?

以下是一个示例查询的建议方法。

  1. Django ORM

    table_name.objects().all()

  2. 使用 django.db 连接游标的 PostgreSQL 原始 sql 查询

如果我的数据库在另一台服务器上的 RDS 上运行,有人可以建议上述哪一项将导致更快地提高性能

【问题讨论】:

  • 不,ORM 的开销与往返数据库相比是微不足道的。
  • Django 使用 psycopg2 与 PostgreSQL 通信。 Here's 对使用该库进行读写的不同方法进行了良好的性能比较。还有像this 这样的举措,试图在 Django 中实现最快的可用。但是,如果您已经考虑在原始 SQL 上进行操作,那么直接使用 psycopg2 可能比强制 Django 以某种方式为您使用它更容易、更快、更灵活。

标签: sql django database postgresql optimization


【解决方案1】:

使用原始查询将导致接近没有性能差异。 ORM确实使用了几个周期来构造查询,但这与发送查询、数据库接收、解释和运行查询以及将结果发回的工作相比是微不足道的。

在某些情况下,ORM 可能确实会进行(过度)复杂的查询,但如果您获取所有记录,情况并非如此。有时需要 ORM 专业知识(就像它需要 SQL 专业知识一样)才能找到性能更好的查询。

您还可以使用.values() 让Django ORM 为您完成工作,从而更方便地构造DataFrame

res = pd.DataFrame(table_name.objects.<b>values()</b>)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-26
    • 2019-08-05
    • 1970-01-01
    • 2010-11-12
    • 2013-10-22
    • 2019-04-03
    • 2018-05-15
    • 2022-08-18
    相关资源
    最近更新 更多