我怎么能在SQLAlchemy中这样做?

时间:2014-03-31 09:20:20

标签: python sqlalchemy

我有一个SQLAlchemy模型,比如Entity,它有一个列is_published。如果我通过ID查询此信息,我只想在is_published设置为True时返回此信息。我想我可以使用过滤器。但是如果存在关系,我能够并且需要像another_model_obj.entity那样访问它,如果该实例的is_published设置为{{1},我只希望它给出相应的实体对象}}。我该怎么做?一种解决方案是每次使用时都使用if块来包装它。但是我使用了这么多次,如果我再次使用它,我将不得不记住这个细节。有什么方法可以在SQLAlchemy中自动执行此操作,还是有任何其他更好的解决方案来解决这个问题?谢谢

2 个答案:

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