Python 如何在sqlalchemy中为select语句提供列列表?

Python 如何在sqlalchemy中为select语句提供列列表?,python,sqlalchemy,Python,Sqlalchemy,下面的代码用于从“消息”中选择“国家”、“性别”~ 当我尝试使用sql时 columns = ( Message.country, Message.gender, ) users = session.query( columns ).filter( Message.date_joined.between(begin_date, end_date), ).all() 我出错了 sqlalch

下面的代码用于从“消息”中选择“国家”、“性别”~

当我尝试使用sql时

    columns = (
        Message.country,
        Message.gender,
    )

    users = session.query(
        columns
    ).filter(
        Message.date_joined.between(begin_date, end_date),
    ).all()
我出错了

sqlalchemy.exc.InvalidRequestError: SQL expression, column, or mapped entity expected - got '(<sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x117f215c8>, <sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x117f21518>)'
sqlalchemy.exc.InvalidRequestError:SQL表达式、列或映射实体应为-get'(,)'
我认为,若我将参数设置为tuple,那个么这是可能的,尽管存在异常


如何将列指定为查询变量?

列应该是列表的一部分,并且仅使用load\u

from sqlalchemy.orm import load_only
columns = ['country', 'gender']

companies = session.query(Message).options(load_only(*columns)).filter(
             Message.date_joined.between(begin_date, end_date)).all()
您也可以尝试使用_实体

columns = [Message.country, Message.gender]
companies = session.query(Message).filter(
                 Message.date_joined.between(begin_date, end_date)).with_entities(*columns).all()

列应该是列表的一部分,并且仅使用load_

from sqlalchemy.orm import load_only
columns = ['country', 'gender']

companies = session.query(Message).options(load_only(*columns)).filter(
             Message.date_joined.between(begin_date, end_date)).all()
您也可以尝试使用_实体

columns = [Message.country, Message.gender]
companies = session.query(Message).filter(
                 Message.date_joined.between(begin_date, end_date)).with_entities(*columns).all()

我仍然在你的解决方案中遇到了这个例外。sqlalchemy.exc.InvalidRequestError:SQL表达式、列或映射实体应为-Get'[,]'列=[UserLastMessage.country,UserLastMessage.gender]用户配置文件=session.query(columns).filter(UserLastMessage.date\u joined.between(begin\u date,end\u date))。all()我已更新了答案。它期望实体进行查询。只要
session.query(*columns).
就可以了,给定原始的属性元组。您的解决方案仍然存在此异常。sqlalchemy.exc.InvalidRequestError:SQL表达式、列或映射实体应为-Get'[,]'列=[UserLastMessage.country,UserLastMessage.gender]用户配置文件=session.query(columns).filter(UserLastMessage.date\u joined.between(begin\u date,end\u date))。all()我已更新了答案。它期望实体进行查询。只要
session.query(*columns).
也可以,只要给出原始的属性元组。