SQL Alchemy性能

时间:2011-05-12 11:49:51

标签: python sqlalchemy

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

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

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

的问候, 波格丹

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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