对象上的 SQLalchemy 过滤器
Sqlalchemy filter on object
我有一个脚本可以测试 SQLAlachemy ORM 驱动的数据库中对象的某些条件。这将是动态的,这给我带来了一些问题。
我想查询所有测试的最小对象数量,因此所有测试都有默认过滤。如果我要测试 2 个测试,两个过滤器都将应用于查询,因此我得到的对象数量最少。
class Employee(Base):
name = Column(String ...)
account = Column(Account ...)
coworkers = relationship(Employee_coworker, use_list=True ...)
...
所以当我得到所有对象时,我想使用我的 2 个过滤器
filter_1 = Employee.account != None
filter_2 = Employee.coworkers.any()
for e in session.query(Employee).filter(or_(filter_1, filter_2)).all():
# IF e is here because of filter_1:
# Do something
# IF e is here because of filter_2:
# Do this thing
...
是否可以通过查询筛选的相同方式来测试对象?
您可以明确要求数据库告诉您匹配的内容:
filter1 = ...
filter2 = ...
filters = [filter1, filter2, ...]
query = session.query(Employee, *filters).filter(or_(*filters))
for employee, filter1_applied, filter2_applied, ... in query:
...
我有一个脚本可以测试 SQLAlachemy ORM 驱动的数据库中对象的某些条件。这将是动态的,这给我带来了一些问题。
我想查询所有测试的最小对象数量,因此所有测试都有默认过滤。如果我要测试 2 个测试,两个过滤器都将应用于查询,因此我得到的对象数量最少。
class Employee(Base):
name = Column(String ...)
account = Column(Account ...)
coworkers = relationship(Employee_coworker, use_list=True ...)
...
所以当我得到所有对象时,我想使用我的 2 个过滤器
filter_1 = Employee.account != None
filter_2 = Employee.coworkers.any()
for e in session.query(Employee).filter(or_(filter_1, filter_2)).all():
# IF e is here because of filter_1:
# Do something
# IF e is here because of filter_2:
# Do this thing
...
是否可以通过查询筛选的相同方式来测试对象?
您可以明确要求数据库告诉您匹配的内容:
filter1 = ...
filter2 = ...
filters = [filter1, filter2, ...]
query = session.query(Employee, *filters).filter(or_(*filters))
for employee, filter1_applied, filter2_applied, ... in query:
...