SQLAlchemy 动态查询字段

1 投票
1 回答
1811 浏览
提问于 2025-04-17 01:27

我有一个包含很多列的表格 --

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

你可以遍历表格中的列。首先,来看一下这个表格:

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

撰写回答