我正在尝试使用 flask-sqlalchemy 查询动态创建 order_by 语句。
这是我的 PurchaseOrder 方法的调用:
pos = PurchaseOrder.get_all_pos(column_order=['id', 'due_date'])
column_order 可以有一个或多个列,用于对查询结果进行排序。
class PurchaseOrder(PurchaseOrderDB):
@classmethod
def get_all_pos(cls, **kwargs):
columns = kwargs.pop('column_order', '')
columns_order = [getattr(cls, column) for column in columns]
if len(columns_order) != 0:
pos = cls.query.order_by(columns_order).all()
else:
pos = cls.query.all()
return pos
columns_order 是 InstrumentedAttributes 的列表,当我将该列表传递给 order_by() 方法时,我得到了我预期的以下错误:
sqlalchemy.exc.ArgumentError: SQL expression object or string expected, got object of type <class 'list'> instead
那么,在我们不知道传入多少列的情况下,有没有其他方法可以动态创建 order_by 呢?在这种情况下,查询应如下所示:
pos = cls.query.order_by(cls.id, cls.due_date).all()