我的模型定义如下:
class Patch(Base):
id = Column(Integer, primary_key=True)
major = Column(Integer, nullable=False)
minor = Column(Integer, nullable=False)
@hybrid_property
def patch(self) -> str:
return f'{self.major}.{self.minor}'
@patch.expression
def patch(self):
return func.concat(self.major, '.', self.minor)
我想提出这样的请求:
Patch.query.order_by(Patch.patch)
应该等于下一个SQL命令:
SELECT * FROM patch ORDER BY major DESC, minor DESC
我试着用^{
@patch.expression
def patch(self):
return self.major, self.minor
但有个例外:
sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got '(<sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7f1a5cd5fc50>, <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7f1a5cd5fd00>)
我知道可以使用custrom comparator,但是我还没有找到如何使用两个字段(即major
,minor
)。你知道吗
有什么想法吗?你知道吗
另外,不一定非得是hybrid_property
,任何一种方式都可以
下面是两个单独的字段上的排序。值得注意的是,
patch
的python实现仍然是一个字符串,因此python对象和SQL行之间的顺序会有所不同,除非将patch
更改为返回(major, minor)
的元组。使用python3.6.5、SQLAlchemy 1.1.15、psycopg2 2.7.7测试相关问题 更多 >
编程相关推荐