5

有问题的代码:

 random_items = random.shuffle(Item.query.all())[20:30]

它位于 Flask/SQLAlchemy 应用程序中。Item是模型。

这就是我现在正在做的事情并且它有效,但是当我开始使用真实的数据集时,我预见到了一场灾难。

我该如何正确地做到这一点?

4

1 回答 1

12

我不完全确定你的担心。是不是您将返回一个大型数据集,所以大型列表将在内存中进行操作?

如果是这样,如果您不太担心可移植性,您可以在 SQL 语句中执行此操作;即,如果您使用的是 MySQL,您可以执行以下操作:

from sqlalchemy.sql.expression import func
Item.query.order_by(func.rand()).offset(20).limit(10).all()

或者,在 PostgreSQL 中:

from sqlalchemy.sql.expression import func
Item.query.order_by(func.random()).offset(20).limit(10).all()

其他数据库具有类似的机制,因此调用的函数将取决于您的目标。当然,如果您尝试编写一个可以在任何 SQLAlchemy 后端上运行的通用应用程序,您可能需要坚持使用提供的示例。

于 2012-06-13T03:27:13.233 回答