Вы можете использовать эту пользовательскую библиотеку (написанную с помощью Promise) для выполнения удаленного вызова.
function $http(apiConfig) {
return new Promise(function (resolve, reject) {
var client = new XMLHttpRequest();
client.open(apiConfig.method, apiConfig.url);
client.send();
client.onload = function () {
if (this.status >= 200 && this.status < 300) {
// Performs the function "resolve" when this.status is equal to 2xx.
// Your logic here.
resolve(this.response);
}
else {
// Performs the function "reject" when this.status is different than 2xx.
reject(this.statusText);
}
};
client.onerror = function () {
reject(this.statusText);
};
});
}
Пример простого использования:
$http({
method: 'get',
url: 'google.com'
}).then(function(response) {
console.log(response);
}, function(error) {
console.log(error)
});
Пожалуйста, прочитайте Маршрутизация Явных объединений / заявлений в коллекции с нетерпением загруженной . Затем, используя contains_eager
, вы можете структурировать свой запрос и получить именно то, что хотите:
authors = (
session.query(Author)
.join(Author.books)
.options(contains_eager(Author.books)) # tell SA that we load "all" books for Authors
.filter(Book.title.like('%SQL%'))
).all()
Обратите внимание, что вы фактически обманываете sqlalchemy, думая, что он загрузил всю коллекцию Author.books
, и поэтому ваша сессия узнает false
информацию о реальном состоянии мира.
Короче говоря, это невозможно. (Если бы это было, экземпляр Author
имел бы другой атрибут books
в зависимости от того, как он был запрошен, что не имеет смысла.)
Вместо этого вы можете запросить обратное соотношение:
books = session.query(Book) \
.filter(Book.title.like('%SQL%')) \
.all()
Затем вы можете получить доступ к .author
в каждой книге, чтобы собрать книги, написанные одним и тем же автором вместе.