Я пытаюсь динамически создать инструкцию order_by с помощью запроса flask-sqlalchemy.
Это вызов моего метода 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()