Spec-Zone.ru › RethinkDB python

Команда ReQL: default

Синтаксис команды

value.default(default_value | function) → any
sequence.default(default_value | function) → any

Описание

Предоставляет значение по умолчанию в случае ошибок отсутствия данных. Команда default вычисляет свой первый аргумент (значение, к которому она привязана). Если этот аргумент возвращает None или при вычислении возникает ошибка отсутствия данных, то default возвращает свой второй аргумент. Второй аргумент обычно является значением по умолчанию, но может быть функцией, возвращающей значение.

Пример: Извлечь заголовки и авторов из таблицы posts. В случае отсутствия или None поля "author", мы хотим получить строку Anonymous.

r.table("posts").map(lambda post:
    {
        "title": post["title"],
        "author": post["author"].default("Anonymous")
    }
).run(conn)

Мы можем переписать предыдущий запрос с помощью r.branch тоже.

r.table("posts").map(lambda post:
    r.branch(
        post.has_fields("author"),
        {
            "title": post["title"],
            "author": post["author"]
        },
        {
            "title": post["title"],
            "author": "Anonymous" 
        }
    )
).run(conn)

Пример: Команда default также может использоваться для фильтрации документов. Извлечь всех наших пользователей, которые не являются взрослыми или чей возраст неизвестен (т.е., поле age отсутствует или равно None).

r.table("users").filter(lambda user:
    (user["age"] < 18).default(True)
).run(conn)

Еще один способ записи предыдущего запроса — установить возраст в -1 при отсутствии поля.

r.table("users").filter(lambda user:
    user["age"].default(-1) < 18
).run(conn)

Этого можно добиться с помощью has_fields вместо default.

r.table("users").filter(lambda user:
    user.has_fields("age").not_() | (user["age"] < 18)
).run(conn)

Тело каждого фильтра заключено в неявный .default(False). Вы можете переопределить значение False с помощью параметра default.

r.table("users").filter(
    lambda user: (user["age"] < 18).default(True),
    default=True
).run(conn)

Пример: Функциональная форма default принимает сообщение об ошибке в качестве аргумента.

r.table("posts").map(lambda post:
    {
        "title": post["title"],
        "author": post["author"].default(lambda err: err)
    }
).run(conn)

В данном примере просто возвращается сообщение об ошибке, поэтому оно не очень полезно. Но можно было бы изменить значение по умолчанию в зависимости от конкретного сообщения об ошибке.

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/default/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API