今天碰到一个需求,页面上需要显示一个行号,程序是使用Flask写的.
我使用PostgresSQL数据库,开始我想就建一个view
create view view01 as
SELECT row_number() OVER (ORDER BY col1) AS rownum, .....
--然后使用view01显示数据
select rownum, from view01 where 条件
没想到row_number()是作用在view01的结果上的^-^
那看来要在Flask的model上写了。
Flask 使用SQLAlchemy定义的,原来只会 rownum = db.Column(db.Integer),怎么使用函数而不是字段,就要看一下了。
查SQLAlchemy文档吧,具体可以参考
http://docs.sqlalchemy.org/en/latest/core/sqlelement.html?highlight=row_number
使用column_property将就可以了。
示例如下:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
rownum = db.column_property(func.row_number().over(order_by='col1 desc'))
另外看到还可以写子查询,不过还没有测试,只是记录下:
db.column_property(select([func.row_number().over()])