我想将行号作为我的查询列。由于我使用的是 MySql,我无法使用func.row_number()SqlAlchemy的内置功能。此查询的结果将被分页,因此我想在拆分发生之前保留行号。
session.query(MyModel.id, MyModel.date, "row_number")
Run Code Online (Sandbox Code Playgroud)
我尝试使用 anhybrid_property来增加MyModel我在查询之前重置的类内部的静态变量,但它没有用。
@hybrid_property
def row_number(self):
cls = self.__class__
cls.row_index = cls.row_index + 1
return literal(self.row_index)
@row_number.expression
def row_number(cls):
cls.row_index = cls.row_index + 1
return literal(cls.row_index)
Run Code Online (Sandbox Code Playgroud)
我还尝试将子查询与此解决方案混合使用:
session.query(myquery.subquery(), literal("@rownum := @rownum + 1 AS row_number"))
Run Code Online (Sandbox Code Playgroud)
但是我没有找到一种方法来为(SELECT @rownum := 0) r.
有什么建议?
编辑
目前,我正在循环分页查询的结果,并将从当前页面计算出的数字分配给每一行。
我有一个具有类型为Date和的两列的模型Time。我希望我的查询将这些列一起返回并格式化。我尝试使用hybrid_property这样的:
@hybrid_property
def mydate_and_mytime(self):
return self.mydate.strftime("%Y-%m-%d") + " + " self.mytime.strftime("%H:%M")
Run Code Online (Sandbox Code Playgroud)
但是,属性内的类型,self.mydate并且self.mytime是InstrumentedAttribute不具有的strftime方法,并且它会产生错误。
如何使以下查询有效?
session.query(MyModel.mydate, MyModel.mytime, MyModel.mydate_and_mytime)
Run Code Online (Sandbox Code Playgroud)