现在我有
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)
似乎在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()