如何使用SQLAlchemy从表中选择一个或多个随机行?
发布于 2008-09-13 20:09:29
这在很大程度上是数据库特有的问题。
我知道PostgreSQL、SQLite、MySQL和Oracle能够按随机函数排序,因此您可以在SQLAlchemy中使用以下命令:
from sqlalchemy.sql.expression import func, select
select.order_by(func.random()) # for PostgreSQL, SQLite
select.order_by(func.rand()) # for MySQL
select.order_by('dbms_random.value') # For Oracle
接下来,您需要根据需要的记录数量限制查询(例如,使用.limit()
)。
请记住,至少在PostgreSQL中,选择随机记录有严重的性能问题;here就是一篇很好的文章。
发布于 2008-12-24 03:22:31
如果您正在使用orm,并且表并不大(或者您缓存了它的行数),并且您希望它独立于数据库,那么真正简单的方法是。
import random
rand = random.randrange(0, session.query(Table).count())
row = session.query(Table)[rand]
这是稍微作弊,但这就是你使用orm的原因。
发布于 2013-02-16 10:19:56
有一种简单的方法可以拉取一个与数据库无关的随机行。只要使用.offset()即可。不需要拉取所有行:
import random
query = DBSession.query(Table)
rowCount = int(query.count())
randomRow = query.offset(int(rowCount*random.random())).first()
其中Table是您的表(或者您可以在其中放置任何查询)。如果您想要几行,那么您可以多次运行此命令,并确保每一行都不同于前一行。
https://stackoverflow.com/questions/60805
复制相似问题