从查询结果中获取一列的值列表

新手上路,请多包涵

我有一个 User 模型,用户可以使用相同的名称。我想获取所有具有给定名称的用户的电子邮件地址。但是,我必须对查询结果执行 result[0].email 以获取一行的电子邮件。我可以用 for 循环来做到这一点,但是有没有办法只获取一个字段的列表而不必每次都这样做?

 my_result = db.session.query(my_table).filter_by(name=name)
emails = []
for r in my_result:
    emails.append(r.email)

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

阅读 384
2 个回答

不,实际上没有办法解决 SQLAlchemy 查询返回字典列表的事实。如果您想要一组特定的字段,您可以只查询这些字段,但如果您想要 一个 字段的列表,则必须从结果中提取它。以下示例获取具有给定名称的每个用户的唯一电子邮件列表。

 emails = [r.email for r in db.session.query(my_table.c.email).filter_by(name=name).distinct()]

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

有一种方法可以使用 values 方法从 filter_by 查询返回特定列。如下:

  emails = [r[0] for r in db.session.query(my_table).filter_by(name=name).values('email')]

或者:

  emails = [r[0] for r in User.query.filter_by(name=name).values('email')]

values() 将任意数量的字段名称作为参数并返回一个生成器,该生成器具有元组,每个字段名称的每个值。使用列表理解来获取该元组的第一项 emails 将是一个纯字符串电子邮件地址列表。

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

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