Как я могу фильтровать определенные объекты из отношений «один-ко-многим»? [Дубликат]

Вы можете использовать эту пользовательскую библиотеку (написанную с помощью 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)
});
1
задан PCL 21 February 2014 в 04:52
поделиться

2 ответа

Пожалуйста, прочитайте Маршрутизация Явных объединений / заявлений в коллекции с нетерпением загруженной . Затем, используя 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 информацию о реальном состоянии мира.

3
ответ дан Ilja Everilä 5 September 2018 в 11:15
поделиться

Короче говоря, это невозможно. (Если бы это было, экземпляр Author имел бы другой атрибут books в зависимости от того, как он был запрошен, что не имеет смысла.)

Вместо этого вы можете запросить обратное соотношение:

books = session.query(Book) \
               .filter(Book.title.like('%SQL%')) \
               .all()

Затем вы можете получить доступ к .author в каждой книге, чтобы собрать книги, написанные одним и тем же автором вместе.

1
ответ дан univerio 5 September 2018 в 11:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: