有问题的代码:
random_items = random.shuffle(Item.query.all())[20:30]
它位于Flask / SQLAlchemy应用程序中。Item
是模型。
这就是我现在正在做的事情,但是当我开始使用真实的数据集时,我预见到了灾难。
我该如何正确地做到这一点?
答案 0 :(得分:10)
我不完全确定你的担忧。是否会返回大型数据集,因此大型列表将在内存中进行操作?
如果是这样,如果你不是过分担心可移植性,你可以在SQL语句中做到这一点;即,如果你使用的是MySQL,你可以这样做:
Item.query.order_by(func.rand()).offset(20).limit(10).all()
或者,在PostgreSQL中:
Item.query.order_by(func.random()).offset(20).limit(10).all()
其他数据库具有类似的机制,因此调用的函数取决于您的目标。当然,如果您正在尝试编写可以在任何SQLAlchemy的后端上运行的通用应用程序,您可能需要坚持使用提供的示例。