Python SQLAlchemy将null传递给或

Python SQLAlchemy将null传递给或,python,sql,oracle,sqlalchemy,Python,Sql,Oracle,Sqlalchemy,在SQL中,如果我提供一个v_category=“fruption”,那么它将返回所有小说书籍,如果我们提供v_category=null,那么它将提供所有类别的书籍: select * from book where category = :v_category or :v_category is null 在SQLAlchemy中如何做到这一点: books=Book.query.filter(或(category=v\u category,v\u category为None)。all()

在SQL中,如果我提供一个v_category=“fruption”,那么它将返回所有小说书籍,如果我们提供v_category=null,那么它将提供所有类别的书籍:

select * from book where category = :v_category or :v_category is null
在SQLAlchemy中如何做到这一点:

books=Book.query.filter(或(category=v\u category,v\u category为None)。all()

但是,由于or_u只接受参数而不接受条件,因此会抛出错误:

".filter(or_(workscope = v_workscope, v_workscope is None))                                        ^
SyntaxError: positional argument follows keyword argument"

我认为如果你的
v_category
为空,你不应该按
category.is_u(None)
进行筛选。这样做,你将返回所有类别为
null
的书籍。根据你的问题,如果
v_category
None
,你想返回所有类别的书籍

您可以尝试以下代码:

def按类别获取书籍(v类别):
query=Book.query
如果v_类别:
query=query.filter(category==v_category)
返回查询
或。林特更喜欢后者。