【问题标题】:For SQLAlchemy query, how to add filter 'not' clause?对于 SQLAlchemy 查询,如何添加过滤器 'not' 子句?
【发布时间】:2021-10-20 16:27:25
【问题描述】:

我使用带有 SQLAlchemy 模型的 flask-appbuilder,我发现他们所有的数据模型过滤器都使用“和”关系。

我的意思是当烧瓶查询某些东西时,它会:

self.datamodel.filter_by(id='abt').filter_by(testz_pro='mytest')

但我想使用“或”关系:

类似的sql:

select * from number where id='1232' or id ='34343' 

所以,我必须将“或”关系更改为“和”

所以,我的 sql 是这样的:

select * from number where not (id<>'1232' and id<>'34343') 

我只是不知道 SQLAlchemy 查询如何表达“不”。

你能举个例子吗?

【问题讨论】:

  • 是否有INNOT IN 运算符?
  • 我在其他一些问题中看到它有.in_().notin_()
  • 我认为我不能这样做,因为 .in_() 或 .notin_() 只影响直接子句,我可能有另一个条件,例如 'like',我希望所有子句都带有 '不是'条件。

标签: python sqlalchemy orm


【解决方案1】:

您需要为此使用filter 方法,因为无法否定filter_by 的关键字参数。

from sqlalchemy import and_, not_

session.query(MyModel).filter(not_(and_(MyModel.id='abt', MyModel.testz_pro='mytest')))

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 2015-05-11
    • 2015-01-15
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多