SQLAlchemy filter是否支持多参数?解析notin_用法
问题解答
关于filter()传入多个参数的原因
- SQLAlchemy的
filter()方法支持传入任意数量的布尔表达式参数,这些参数会被自动转换为SQL中的AND逻辑关联条件。 - 这是框架提供的语法糖,和显式使用
and_(条件1, 条件2)的效果完全一致,但写法更简洁直观。 - 你的代码里,
Question.id.notin_(previous_questions)和Question.category == category_id两个条件,最终会生成类似WHERE question.id NOT IN (...) AND question.category = ?的SQL语句,只有同时满足两个条件的记录才会被筛选出来。
关于notin_()的含义
notin_()是SQLAlchemy列对象的内置方法,专门用来生成SQL中的NOT IN查询条件。- 它接收一个可迭代对象(比如列表、元组、集合,甚至是另一个子查询)作为参数,作用是筛选出当前列的值不在该参数范围内的记录。
- 对应你代码的场景:
previous_questions应该是一个包含若干id值的集合,Question.id.notin_(previous_questions)就是要排除所有id在这个集合里的Question,只保留id不在其中的记录。
内容的提问来源于stack exchange,提问作者dotnet
相关产品推荐
相关产品推荐

