Как вывести значения выбранного столбца - PullRequest
0 голосов
/ 13 ноября 2018

В одной модели Person есть адресная информация. Но так как мы еще не отделяем это от другой таблицы. Я хотел бы только запросить адресную информацию из таблицы Person. Можно ли будет использовать hybrid_property Если нет, что еще мне нужно для достижения этой цели?

Я хочу избежать этого:

db.session.query(Person.id, Person.address_secret_id, Person.address_name).get(pk)

Модель

class Person(db.Model):
    # some lengthy information

    # address
    address_secret_id = db.Column(db.Unicode, nullable=True)
    address_name = db.Column(db.Unicode, nullable=True)

    @hybrid_property
    def address(self):
       # I never tested this but i know this is wrong.
       return self.id + self.address_secret_id + self.address_name

Использование:

db.session.query(Person.address).get(pk)

Ожидаемый результат:

{id: 1, address_secret_id: xxxx, address_name: 'forgetmeland'}

Как мне получить вывод, который только извлекает нужное поле? Это не должно быть диктом или кортежем, пока я получаю то, что нужно.

1 Ответ

0 голосов
/ 13 ноября 2018

Если вы пытаетесь избежать ввода db.session.query(Person.id, Person.address_secret_id, Person.address_name), просто добавьте свойство address_details к модели персонажа.

class Person(db.Model):
    # some lengthy information

    # address
    address_secret_id = db.Column(db.Unicode, nullable=True)
    address_name = db.Column(db.Unicode, nullable=True)

    @property
    def address_details(self):
        keys = ('id', 'address_secret_id', 'address_name')
        return {k: getattr(self, k) for k in in keys}

Вероятно, меньше строк кода, чем при попытке использовать какой-то гибридзапрос, и все же только одна поездка в базу данных.

Запрос будет:

Person.query.get(1).address_details

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...