2017-01-15 3 views
1

は、SQLクエリがPeewee:Postgresから配列フィールドが空のデータを選択するには?ここ

>> SELECT * FROM artist WHERE albums = '{}'; 

id | name | albums 
----+-------+-------- 
    2 | name2 | {} 

または特定の名前の

>> SELECT * FROM artist WHERE name = 'name1'; 

id | name |  albums  
----+-------+------------------- 
    1 | name1 | {album11,album12} 
をアーティストを選択するためのものであってもよいなしのアルバムのアーティストを選択するためのPostgres

import playhouse.postgres_ext as pg 


db = pg.PostgresqlDatabase(""" credentials ... """) 


class Artist(pg.Model): 
    name = pg.TextField() 
    albums = pg.ArrayField(pg.TextField, default=[]) 

    class Meta: 
     database = db 


db.create_table(Artist) 
Artist.create(name='name1', albums=['album11', 'album12']) 
Artist.create(name='name2') 

で動作するように簡単なピーウィーモデルです

しかし、私はPeeweeとそれを達成しようとすると、私は次の結果を得る

res = Artist.select().where(Artist.name == 'name1') 
assert len(res) == 1 and res[0].name == 'name1' 

res = Artist.select().where(Artist.albums == '{}') 
assert len(res) == 0 

最初のクエリでは、クエリパラメータとして'name1'が使用されます。

2番目のクエリはクエリパラメータとしてplayhouse.postgres_ext._Arrayオブジェクトを受け取ります。

私はPostgres Extensionsのドキュメントを見て、適切なものが見つかりませんでした。

誰かが間違っていることと、空の配列フィールドでデータを選択する方法について説明できますか?あなたはこの制限を回避するために、生のSQLにドロップすることができ

+0

あなたは 'WHERE array_length(アルバム、1)と同等のものを試してみました= '0' playhouse.postgres_ext'に適した形ではありますか? – joanolo

+0

あるいは、Pythonの空のarray/list: '[]'との比較はどうですか? 'res = Artist.select()。where(Artist.albums == [])' – joanolo

+0

@joanolo私の場合は、WHERE array_length(albums、1)はNULLになります。私は 'playhouse.postgres_ext.fn'を見て、そこに' array_length() 'と同等のものが見つかりませんでした。 'Artist.select()。where(Artist.albums == [])'は動作しません。 – tarashypka

答えて

2

res = Artist.select().where(SQL("albums = '{}'")) 
print(len(res)) 
関連する問題