Ask and Learn

SQLAlchemy使用sqlite查询随机结果

最近公司项目接受尾声,有时闲有时忙的,于是就用 bottle 写个美丽人物玩玩,因为东西很小,就使用  sqlite 整了, orm 使用的是闻名的 SQLAlchemy

美丽人物这种东东除了显示当前图片外,还会随机推荐一些其它的人物(那自然是美女了),需要随机返回一些结果呈现给用户。

SQLAlchemy 自然是提供了这种支持的,不过不同的数据库的用法可能会有所不同,sqlite 的方法如下:

from sqlalchemy import func
...
session.query(Item.item_name).order_by(func.random())

其实是调用 sqlite 的 random() 函数。

这里给出一个完整的例子做参考:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session

from sqlalchemy import (create_engine, MetaData, Column, Integer, String)
from sqlalchemy import func

Base = declarative_base()

class Item(Base):
    __tablename__ = 'items'

    item_id = Column(Integer, primary_key=True, autoincrement=True)
    item_name = Column(String(30), nullable=False)

if __name__ == '__main__':
    engine = create_engine('sqlite:///test.db')
    Base.metadata.create_all(engine)

    session = Session(engine)

    # make some records
    session.query(Item).delete()
    session.add_all([
        Item(item_name='Item 1'),
        Item(item_name='Item 2'),
        Item(item_name='Item 3'),
        Item(item_name='Item 4')
    ])
    session.commit()

    # test random results
    for i in range(5):
        print session.query(Item.item_name).order_by(func.random()).all()</pre>