相交sqlalchemy查询对象

时间:2015-12-16 06:42:09

标签: python mysql flask-sqlalchemy

我有两个sqlalchemy查询对象(q1和q2) - 它们都属于同一个表,我希望能够与两个查询相交。由于我的数据库是MySql,q1.intersect(q2)会抛出sql语法错误。有没有办法在sqlalchemy中执行相交的MySql查询?我的研究指出使用子查询,别名和左连接,但所有这些解决方案都是本机sql查询。我正在寻找sqlalchemy语法。

查询:

q1 = Model1().query().filter(Model1.description.ilike(%aws%)) 
q2 = Model1().query().filter(Model1.tags.ilike(%cloud%)) 

我想要返回q1.intersect(q2)

此外,我在此处指定的查询只是更广泛的案例之一。我有一个函数,它接受一个操作符(和/或)和两个操作数(sql炼金术查询对象,q1和q2),它们对于不同的函数调用可以是不同的和复杂的。在这种情况下,我不能做嵌套过滤器。我需要只使用q1和q2。

1 个答案:

答案 0 :(得分:0)

对于这个简单的情况,你可以在同一个查询中使用两个过滤器

results = db.query(Model1).filter(
    Model1.description.ilike('%aws'), 
    Model1.tags.ilike('%cloud%')
)

这将返回与相交相同的结果。

有两个单独的查询:

stmt = q2.subquery()
results = q1.outerjoin(stmt, Model1.id==stmt.c.id).filter(stmt.c.id != None)