2016-04-18 4 views
1

テーブルに1001行あります。配列カラムに値を含まない行のSQLAlchemyフィルタ

# 1001 
print len(Session.query(MyTable).all()) 

1つの行が配列されinfo欄に「リコール」の文字列を有しています。

# 1 
query = Session.query(MyTable) 
query = query.filter(MyTable.info.contains(['Recalled'])) 
print len(query.all()) 

しかし、フィルターを無効にすると、期待したように1000の代わりに0の結果が得られます。

# 0 
query = Session.query(MyTable) 
query = query.filter(~MyTable.info.contains(['Recalled'])) 
print len(query.all()) 

なぜこれが機能しないのですか?

答えて

2

これは単なるNULL値です。

from sqlalchemy.sql import or_ 
query = Session.query(MyTable) 
query = query.filter(or_(MyTable.info == None, ~MyTable.info.contains(['Recalled']))) 
print len(query.all()) 
のように明示的に含める必要があります
関連する問題