SQLAlchemy Query Dynamic Field - PullRequest
       4

SQLAlchemy Query Dynamic Field

1 голос
/ 05 сентября 2011

У меня есть таблица со многими столбцами -

class Dummy(object):
    __tablename__ = 'dummies'
    c1 = Column(Integer)
    c2 = Column(Integer)
    c3 = Column(Integer)
    ...
    cN = Column(Integer)

Могу ли я запросить по всем столбцам по отдельности без указания каждого имени столбца вручную? -

for i in range(1, N):
    c_name = 'c%d' % i
    dummy = DBSession().query(Dummy).filter_by(???=0).first()

Спасибо.

1 Ответ

3 голосов
/ 05 сентября 2011

Вы можете перебирать столбцы в таблице. Во-первых, таблица:

from sqlalchemy.orm.attributes import manager_of_class
dummy_table = manager_of_class(Dummy).mapper.mapped_table

и, наконец, запрос

for col in dummy_table.columns:
    dummy = session.query(Dummy).filter(col == 0).first()

Или, может быть, вы на самом деле генерируете определенный набор столбцов из более сложной функции, чем вы показываете. В этом случае используйте getattr. Нет, правда.

for i in range(1, N):
    c_name = 'c%d' % i
    dummy = DBSession().query(Dummy).filter(getattr(Dummy, c_name) == 0).first()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...