Peewee:如何从数组字段为空的 Postgres select 数据?
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')
对于 select 没有专辑的艺术家,SQL 查询可能是
>> SELECT * FROM artist WHERE albums = '{}';
id | name | albums
----+-------+--------
2 | name2 | {}
或 select 具有特定名称的艺术家
>> 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 上的文档,但没有找到合适的内容。
有人可以解释我做错了什么以及如何 select 具有空数组字段的数据吗?
您可以进入原始 SQL 来解决此限制:
res = Artist.select().where(SQL("albums = '{}'"))
print(len(res))
这是一个与 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')
对于 select 没有专辑的艺术家,SQL 查询可能是
>> SELECT * FROM artist WHERE albums = '{}';
id | name | albums
----+-------+--------
2 | name2 | {}
或 select 具有特定名称的艺术家
>> 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 上的文档,但没有找到合适的内容。
有人可以解释我做错了什么以及如何 select 具有空数组字段的数据吗?
您可以进入原始 SQL 来解决此限制:
res = Artist.select().where(SQL("albums = '{}'"))
print(len(res))