【问题标题】:How to use filter_by and not equals to in sqlalchemy?如何在 sqlalchemy 中使用 filter_by 而不是等于?
【发布时间】: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。如果您没有预先加载任何关系,那么在使用查询返回的对象之前关闭会话也会产生问题。

标签: sqlalchemy sqlanywhere sqlalchemy-utils


【解决方案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") 吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-24
      • 2015-07-05
      • 1970-01-01
      • 2011-01-08
      • 2020-07-30
      • 2017-04-02
      • 1970-01-01
      • 2013-06-08
      相关资源
      最近更新 更多