Python SQLAlchemy ORM在Model.query中加载特定列

Python SQLAlchemy ORM在Model.query中加载特定列,python,sqlalchemy,flask-sqlalchemy,Python,Sqlalchemy,Flask Sqlalchemy,我是python/sqlachemy领域的新手。我正在尝试使用flask中的sqlachemy从PostgreSQL中获取数据,在这里我只需要获取选定的列,而不是通过网络从数据库中流式传输所有列。其中一种方法是使用工作正常的会话(如下所示) session.query(User.user_id, User.name).all() 但出于某种原因,我希望坚持使用Model.query方法,而不是使用会话。所以我最后用了下面的方法 User.query.options(load_only(User

我是python/sqlachemy领域的新手。我正在尝试使用flask中的sqlachemy从PostgreSQL中获取数据,在这里我只需要获取选定的列,而不是通过网络从数据库中流式传输所有列。其中一种方法是使用工作正常的会话(如下所示)

session.query(User.user_id, User.name).all()
但出于某种原因,我希望坚持使用Model.query方法,而不是使用会话。所以我最后用了下面的方法

User.query.options(load_only(User.user_id, User.name)).all()
class User(db.Model):
    __tablename__ = 'user_info'

    user_id = Column(String(250), primary_key=True)
    name = Column(String(250))
    email = Column(String(250))
    address = Column(String(512))
上面的代码片段不会过滤所选列,而是返回所有列。看起来sqlachemy不尊重load_only参数。为什么在Model.query中使用这种行为和任何解决方案来实现我的用例而不是使用会话

我的用户模型如下所示

User.query.options(load_only(User.user_id, User.name)).all()
class User(db.Model):
    __tablename__ = 'user_info'

    user_id = Column(String(250), primary_key=True)
    name = Column(String(250))
    email = Column(String(250))
    address = Column(String(512))
版本信息

  • Python-3.7
  • sqlachemy-1.3.11
编辑1:虽然我添加了仅加载属性,但它正在生成以下查询

SELECT user.user_id AS user_user_id, user.name AS user_name, user.email AS user_email, user.address AS user_address FROM user_info

您如何确定它正在生成您看到的查询?(您可以通过执行
User.query.options(仅加载(User.User\u id,User.name)).statement.compile(引擎)
)来检查查询编译为什么内容。这是否回答了您的问题?这一点以前已经得到了回答:-tl;druse
User.query.with_实体(User.User\u id,User.name).all()
。您可以通过打印
User.query.with_实体(User.id,User.name).statement.compile().string