有问题的代码:
random_items = random.shuffle(Item.query.all())[20:30]
它位于 Flask/SQLAlchemy 应用程序中。Item
是模型。
这就是我现在正在做的事情并且它有效,但是当我开始使用真实的数据集时,我预见到了一场灾难。
我该如何正确地做到这一点?
有问题的代码:
random_items = random.shuffle(Item.query.all())[20:30]
它位于 Flask/SQLAlchemy 应用程序中。Item
是模型。
这就是我现在正在做的事情并且它有效,但是当我开始使用真实的数据集时,我预见到了一场灾难。
我该如何正确地做到这一点?
我不完全确定你的担心。是不是您将返回一个大型数据集,所以大型列表将在内存中进行操作?
如果是这样,如果您不太担心可移植性,您可以在 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 后端上运行的通用应用程序,您可能需要坚持使用提供的示例。