在SQLAlchemy/Elixir中选择不同的列值

86 投票
7 回答
144669 浏览
提问于 2025-04-15 18:43

在我写的一个小脚本中,我使用了SQLAlchemy和Elixir,我需要获取某一列的所有不同值。在普通的SQL中,这个操作很简单,只需要这样做:

SELECT DISTINCT `column` FROM `table`;

我知道我可以直接“手动”运行这个查询,但如果可以的话,我更想使用SQLAlchemy的声明式语法(或者Elixir)。我相信这一定是可行的,我甚至在SQLAlchemy的文档中看到过类似的提及,但我已经在文档中搜索了几个小时(还有Elixir的文档),就是找不到具体怎么做。所以我到底漏掉了什么呢?

7 个回答

9

我想要计算不同的值,但如果直接用 .distinct().count(),它们会先计算总数,结果只会给出一个值,然后再进行去重。所以我需要这样做:

from sqlalchemy.sql import func
Session.query(func.count(func.distinct(Table.column))
11

对于这个类:

class Assurance(db.Model):
    name = Column(String)

你可以这样做:

assurances = []
for assurance in Assurance.query.distinct(Assurance.name):
    assurances.append(assurance.name)

这样你就能得到一个不重复的值的列表

151

你可以查询映射类的列属性,而查询类有一个可以生成的 distinct() 方法:

for value in Session.query(Table.column).distinct():
     pass

撰写回答