SQLAlchemy:如何从Array字段获取所有不同的值?

时间:2019-08-30 19:21:02

标签: python postgresql flask sqlalchemy flask-sqlalchemy

我的博客文章模型如下:

title = db.Column(db.String())
content = db.Column(db.String())
tags = db.Column(ARRAY(db.String))

标签字段可以为空列表。

现在,我想从数据库条目中选择所有具有最佳性能的标记-排除空数组。

因此,假设我有3条记录,其中标签字段的值如下:

  • ['数据库','服务器','连接']
  • []
  • ['连接','安全']

结果将是['database','server','connection','security']

实际顺序并不重要。

1 个答案:

答案 0 :(得分:0)

distinct()方法仍然可以在数组列上正常工作。

from sqlalchemy import func

unique_vals = BlogPost.query(func.unnest(BlogPost.tags)).distinct().all()

https://docs.sqlalchemy.org/en/13/orm/query.html?highlight=distinct#sqlalchemy.orm.query.Query.distinct

这与在postgres中运行查询相同:

SELECT DISTINCT unnest(tags) FROM blog_posts