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

新手上路,请多包涵

在我使用 SQLAlchemy 和 Elixir 编写的一个小脚本中,我需要获取特定列的所有不同值。在普通 SQL 中,这将是一个简单的问题

SELECT DISTINCT `column` FROM `table`;

而且我知道我可以“手动”运行该查询,但如果可以的话,我宁愿坚持使用 SQLAlchemy 声明性语法(和/或 Elixir)。我敢肯定这一定是可能的,我什至在 SQLAlchemy 文档中看到了对这种事情的暗示,但是我已经在该文档中寻找了几个小时(以及 Elixir 的文档),我就是不能似乎实际上弄清楚了如何完成。那么我错过了什么?

原文由 David Z 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 441
2 个回答

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

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

原文由 Ants Aasma 发布,翻译遵循 CC BY-SA 2.5 许可协议

上课,

 class User(Base):
    name = Column(Text)
    id = Column(Integer, primary_key=True)

方法一:使用 load_only

 from sqlalchemy.orm import load_only
records= (db_session.query(User).options(load_only(name)).distinct().all())
values = [record[0] if len(record) == 1 else record for record in records]  # list of distinct values

方法2:没有任何进口

records = db_session.query(User.name).distinct().all()
l_values = [record.__dict__[l_columns[0]] for record in records]

原文由 sree_pk 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题