balki
balki

Reputation: 27684

Dynamically query a subset of columns in sqlalchemy

Assume only two columns(name and id) are needed from a table. I would code something like below:

session.query(User.id, User.name).all()

But if the column names are dynamic,

def get_data(table, columns):
    return session.query(*(getattr(table, column) for column in columns)).all()

But the above one looks ugly. Is there a better recommended way?

Upvotes: 9

Views: 9667

Answers (1)

alecxe
alecxe

Reputation: 474191

You can get use of select():

from sqlalchemy.sql import select

columns = ['id', 'name']
print(session.query(select(from_obj=User, columns=columns)).all())

Hope that helps.

Upvotes: 14

Related Questions