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

Pav*_*dhu 8 python sqlalchemy

我有一个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)
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 15

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

emails = [r.email for r in db.session.query(my_table.c.email).filter_by(name=name).distinct()]
Run Code Online (Sandbox Code Playgroud)


Mar*_*ark 5

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

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

或者:

 emails = [r[0] for r in User.query.filter_by(name=name).values('email')]
Run Code Online (Sandbox Code Playgroud)

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