我有一个SQLAlchemy模型,比如Entity
,它有一个列is_published
。如果我通过ID查询此信息,我只想在is_published
设置为True
时返回此信息。我想我可以使用过滤器。但是如果存在关系,我能够并且需要像another_model_obj.entity
那样访问它,如果该实例的is_published
设置为{{1},我只希望它给出相应的实体对象}}。我该怎么做?一种解决方案是每次使用时都使用if块来包装它。但是我使用了这么多次,如果我再次使用它,我将不得不记住这个细节。有什么方法可以在SQLAlchemy中自动执行此操作,还是有任何其他更好的解决方案来解决这个问题?谢谢
答案 0 :(得分:2)
它看起来好像你需要一个联接:
session().query(AnotherModel).join(Entity).filter(Entity.is_published)
答案 1 :(得分:0)
这个问题在这里被多次询问,但仍然没有一个好的答案。 Here are SQLAlchemy的作者建议的可能解决方案。一个更精细的查询类,用于排除未发布的对象is provided in iktomi library。它现在仅适用于SQLAlchemy 0.8。*分支,但应尽快移植到0.9。*。有关限制(失败的测试标有@unittest.skip()
)和用法示例,请参阅test cases。