Shift 'n Tab
Shift 'n Tab

Reputation: 9443

How to output selected column values

In a single model Person there is an address information. But since we are not separating this yet to another table. I would like to only query the address information out of Person table. Would it be possible using hybrid_property If not what else do I need to achieve this stuff?

I wanna avoid this one:

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

The model

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

Usage:

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

Expected Output:

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

How can I achieve an output that is only retrieving the desired field? It doesn't need to be dict or tuple as long as Im getting what is needed.

Upvotes: 0

Views: 39

Answers (1)

SuperShoot
SuperShoot

Reputation: 10861

If you are trying to avoid having to type db.session.query(Person.id, Person.address_secret_id, Person.address_name), just add an address_details property on the person model.

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}

Probably less lines of code than trying to use some sort of hybrid query, and still just the one trip to the database.

Query would be:

Person.query.get(1).address_details

Upvotes: 1

Related Questions