2017-01-05 90 views
0

隨着SQLAlchemy的我可以查詢與endswith方法篩選結果:如何使用過濾器運營商的SQLAlchemy

session.query(MyObject).filter(MyObject.uuid.endswith("z")).all() 

類似與startswith

session.query(MyObject).filter(MyObject.uuid.startswith("a")).all() 

contains相同的語法:

session.query(MyObject).filter(MyObject.uuid.contains('c')).all() 

不知==!=操作符可以用相似的語法替換。 因此,而不是:

session.query(MyObject).filter(MyObject.uuid=='cfbb4cdb57').all() 

它會是這樣的:

session.query(MyObject).filter(MyObject.uuid.is('cfbb4cdb57')).all() 
+0

['is_()'](http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.expression.ColumnElement.is_)映射到SQL「IS」,因此與平等不一樣。您可以使用[dunder方法(http://docs.sqlalchemy.org/en/latest/core/sqlelement.html#sqlalchemy.sql.operators.ColumnOperators.__eq__),但是這會是可憎的。 –

回答

1

是。

.is_().isnot()以及調用.__eq__()明確。

但是,請注意is==not the same in Python。從PEP8:

Comparisons to singletons like None should always be done with is or is not , never the equality operators

所以,我想你會想用==(不__eq__)非單身人士和is_()針對None比較。

的所謂可查詢屬性的完整列表here

+0

這就提出了一個錯誤:'session.query(爲MyObject).filter(MyObject.uuid.is _( 'cfbb4cdb57'))所有()' – alphanumeric

+0

看起來既'.is_(無)'和'.isnot(無) 「期待」沒有「是他們唯一的論點。提供任何其他類型(布爾,字符串,int)會使執行崩潰。 – alphanumeric

+0

對,我試圖暗示,在我的答案。我會更新它以更明確。 – ACV