簡體   English   中英

Peewee:如何從Postgres中選擇數組字段為空的數據?

[英]Peewee: How to select data from Postgres where array field is empty?

這是與Postgres一起使用的簡單Peewee模型

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')

對於選擇沒有專輯的藝術家,SQL查詢可能是

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

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

或用於選擇具有特定名稱的藝術家

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

 id | name  |      albums       
----+-------+-------------------
  1 | name1 | {album11,album12}

但是當我嘗試用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'作為查詢參數。

第二個查詢以playhouse.postgres_ext._Array對象作為查詢參數。

我看了有關Postgres Extensions的文檔,但沒有找到合適的文檔。

有人可以解釋我在做什么錯以及如何使用空數組字段選擇數據嗎?

您可以進入原始SQL來解決此限制:

res = Artist.select().where(SQL("albums = '{}'"))
print(len(res))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM