SQLAlchemy查询动态字段

时间:2011-09-05 05:49:20

标签: python sql database sqlalchemy

我有一个包含许多列的表 -

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 个答案:

答案 0 :(得分:3)

您可以迭代表中的列。首先,表格:

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()