如何在 sqlalchemy 中使用 filter_by 而不是等于?
Posted
技术标签:
【中文标题】如何在 sqlalchemy 中使用 filter_by 而不是等于?【英文标题】:How to use filter_by and not equals to in sqlalchemy? 【发布时间】:2018-11-05 20:02:46 【问题描述】:我有一个如下定义的函数来查询数据库表
def query_from_DB(obj, **filter):
DBSession = sessionmaker(bind=engine)
session = DBSession()
res = session.query(obj).filter_by(**filter)
session.close()
return [x for x in res]
我使用如下请求查询表
query_from_DB(Router, sp_id="sp-10.1.10.149", connectivity="NO")
上面的结果正确返回了数据库的响应,但是当我使用查询时
query_from_DB(Router, sp_id!="sp-10.1.10.149", connectivity="NO")
我遇到了一个错误
SyntaxError: non-keyword arg after keyword arg
为了获得结果,我可以进行哪些可能的更改?
【问题讨论】:
每次查询时创建一个sessionmaker
实例是一种反模式。您可以将DBSession = sessionmaker(bind=engine)
行移到query_from_DB
之外。见When Do I Make a sessionmaker。如果您没有预先加载任何关系,那么在使用查询返回的对象之前关闭会话也会产生问题。
【参考方案1】:
我不相信您可以在关键字参数上使用 !=
。
您可以使用connectivity="YES"
或使用filter
sqlalchemy 函数,这样您就可以传递==
或!=
,但是您将无法使用关键字参数。你必须像这样传递一个 SQL 表达式......
res = session.query(obj).filter_by(connectivity != "NO")
这个问题可能会有所帮助... flask sqlalchemy querying a column with not equals
【讨论】:
【参考方案2】:您只是尝试res = session.query(obj).filter_by(connectivity <> "NO")
吗?
【讨论】:
以上是关于如何在 sqlalchemy 中使用 filter_by 而不是等于?的主要内容,如果未能解决你的问题,请参考以下文章
SQLAlchemy中filter和filter_by的区别
SQLAlchemy学习-8.query查找之filter()和filter_by()区别