Ответ 1:
Когда вы даете какой-либо синтаксис, что именно он вернет, вы можете проверить с типом этого синтаксиса, например
Когда вы пишете
In [5]: Thing.amount.desc()
Out[5]: <sqlalchemy.sql.expression._UnaryExpression object at 0x199a5d0>
Будет создан один объект типа expression._UnaryExpression. Так что это выражение вы можете дать sqlalchemy, когда мы хотим унарную операцию. Теперь, когда вы печатаете это
В [6]: a = Thing.amount.desc ()
In [7]: print a
thing.amount DESC
Таким образом, при выполнении запроса он будет преобразован в thing.amount DESC
. Поэтому, когда вы создаете выражение, оно не будет вызывать ничего, оно просто создаст структуру запроса.
Ответ: 2
Когда вы создаете запрос, он создает необходимый объект. Для фильтра и упорядочения по нему нужно выражение, поэтому, если вы перейдете непосредственно к order_by
или filter
, тогда он создаст объект для того же самого внутри. Таким образом, вы можете использовать оба пути.
Ответ: 3
In [8]: Thing.amount == 5
Out[8]: <sqlalchemy.sql.expression._BinaryExpression object at 0x1a1dbd0>
Это также выражение, поэтому вы можете задать выражение для filter_by .
Вы получите больше информации о выражение с сайта sqlalchemy.