admin

如何从表中选择2个不同的随机行?

sql

现在我有

row=session.query(Item).order_by(func.random()).limit(2)
name1=row[0].name
name2=row[1].name

这给了我每个条目的第一列(名称)。问题是,我得到了倍数(它将选择两次相同的随机行。我希望它始终是不同的。是否有一种方法可以在没有if,then语句的情况下进行?

如果有用,当我打印行时,它会给我这样的信息:

SELECT items.id AS items_id, items.name AS items_name, items.data AS items_data FROM items ORDER BY random() LIMIT ? OFFSET ?

为什么会说极限?我已经设置了限制(2)


阅读 142

收藏
2021-06-07

共1个答案

admin

似乎在func.random()上使用order_by在SQL中是个坏主意(http://www.webtrenches.com/post.cfm/avoid-
rand-in-mysql)。相反,我计算了表的长度,找到了具有此长度的2个随机数,然后查询表以查找与这些随机数关联的行。显然,这更快。至少它没有任何重复:)

number=session.query(func.count(Item.id)).scalar()
randoms=random.sample(range(number),2)
item1=session.query(Item).filter_by(id=randoms[0]+1).one()
item2=session.query(Item).filter_by(id=randoms[1]+1).one()
2021-06-07