在SQLAlchemy/Elixir中选择不同的列值
在我写的一个小脚本中,我使用了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