【问题标题】:SQL Alchemy performanceSQLAlchemy 性能
【发布时间】:2011-08-24 01:34:23
【问题描述】:

我正在做一个需要庞大数据库的项目。目前我们正在使用 SQLAlchemy,但我有点担心性能问题。我的问题是,有这样的查询:

session.query(DataStorage).filter(DataStorage.storage_path.startswith(path)).all()

SQLAlchemy 如何进行实际的翻译和过滤。它是否使用 SELECT 子句从 DataStorage 获取所有条目,然后检查每个条目?或者它知道如何将“filter(DataStorage.storage_path.startswith(path))”翻译成 SQL 吗?使用原生 SQL 查询在性能方面损失了多少?

问候, 波格丹

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    我不熟悉您正在使用的特定 SQLAlchemy 构造,但最好的方法是尝试一下。在 MySQL 中打开查询日志并检查 SQLAlchemy 正在生成的查询。您可以尝试手动编写查询并比较两者的性能。 (为此,您的数据库中需要一堆测试数据。)

    通常,ORM 可以很好地处理简单的 SELECT、WHERE 子句、ORDER BY 等。当您开始对数据进行许多连接或大量处理时,构造的查询往往不太理想。这是特定于您的应用程序的。我通常采用的方法是使用 ORM 编写内容,并在必要时使用 SQL 进行优化和替换。

    【讨论】:

    • 您也可以在SQLAlchemy中开启日志查看生成的SQL。
    【解决方案2】:

    SqlAlchemy 使用您的代码生成 SQL 语句。在你的情况下,你有类似的东西:

    SELECT * FROM DataStorage WHERE DataStorage.storage_path LIKE 'path%';
    

    一旦您使用 .all(),查询就会针对数据库运行。因此,在这种情况下,它将获取结果集迭代器中的所有行并将它们返回给您。

    【讨论】:

      猜你喜欢
      • 2010-11-09
      • 2016-08-25
      • 2019-02-25
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多