我使用的是SQLAlchemy 0.5rc,我想为一个关系添加一个自动过滤器,这样每当它试图获取该关系的记录时,如果“远程”被标记为“逻辑删除”(子表的一个布尔字段),它就会忽略这些“远程”的记录
例如,如果一个对象“parent”有一个“children”关系
3条记录,但其中一条被逻辑删除,当我查询“父”时,我希望SQLA
获取只有两个子对象的父对象。
我该怎么做?通过向primaryjoin添加“and”条件
关系的参数?(例如“Children.parent_id == Parent.id and Children.logically_deleted == False
”,但是这样写“and”正确吗?)在
编辑:
我设法这样做了
children = relation("Children", primaryjoin=and_(id == Children.parent_id, Children.logically_deleted==False))
但是有没有办法用字符串代替primaryjoin呢?在
您可以使用以下方法:
这对我有用!在
在SQLAlchemy中,与amp;运算符一起执行逻辑连接的正确方法是and()函数,但要小心后者,因为它有令人惊讶的优先规则,即优先级高于比较运算符。在
您也可以使用一个字符串作为text()构造函数的主联接,但这将使您的代码因急切加载和联接而出现的任何表别名中断。在
对于逻辑删除,最好将整个类映射到忽略已删除值的select上:
我目前只在开发0.4版本的软件,但我建议如下:
我想这就是你想做的,对吧?在
(注意:在web浏览器中编写,而不是真正的代码!)在
相关问题 更多 >
编程相关推荐