Более конкретно, я вижу, что вместо использования естественного SQL-подобного синтаксиса соединений в SQLAlchemy многие люди склонны использовать фильтры для целей объединений.Чтобы уточнить, как я должен выполнить соединение:
(session.Query(Book)
.join(Author, Publisher, Retailer)
.filter(
Author.name == "Crenshaw Adams",
Publisher.country == "United States",
Retailer.is_online == True))
Столбцы соединения подразумеваются в отношениях, определенных в файле объявления модели.
Но везде (особенно в StackOverflow) Iвидел, как люди делают это как:
(session.Query(Book)
.filter(
Book.author_id == Author.id,
Author.publisher_id == Publisher.id,
Publisher.retailer_id == Retailer.id,
Author.name == "Crenshaw Adams",
Publisher.country == "United States",
Retailer.is_online == True
))
Какой из этих методов является правильным способом сделать это?Какой из них больше Pythonic?Или, по крайней мере, более идиоматично в том, как предполагается использовать SQLAlchemy?И есть ли разница с точки зрения использования ресурсов БД или использования ресурсов локальной машины (то есть, нагрузка на ЦП и ОЗУ БД выше, а на локальной машине - меньше, и наоборот)?
Кроме тогопредыдущий способ не допускает использования метода update()
в API запросов - он жалуется на недопустимое обновление нескольких таблиц - даже если я обновляю только одну таблицу.Последнее позволяет update()
нормально работать.