【发布时间】:2018-10-23 09:07:22
【问题描述】:
基本上我已经创建了一个数据库,在正常的完整查询中,这是我使用的代码和生成的响应。
db.session.query(User).all()
生成的查询如下:
<User(email='howard@howard.com', fullname='Howard', company='howard', address='None', password='howard')>, <User(email='emailhoward', fullname='None', company='None', address='None', password='passwordhoward')>
这是合乎逻辑的,因为我正在从表中提取所有内容。但是,当我尝试使用 load_only 专门选择一列时,在本例中为电子邮件列。我使用的代码是:
db.session.query(User).options(load_only(User.address)).all()
db.session.query(User).options(load_only('email')).all()
两个命令都给我相同的结果:
<User(email='howard@howard.com', fullname='Howard', company='howard', address='None', password='howard')>,<User(email='emailhoward', fullname='None', company='None', address='None', password='passwordhoward')>
这非常奇怪,因为我应该在查询中只得到一列。但是,当我使用这个时:
db.session.query(User.email).select_from(User).filter_by(email=email).first()[0]
它神奇地只为我返回一列。我需要使用 load_only,因为我有想要重用相同函数的动态表,而不是维护许多函数集。谁能告诉 load_only 命令有什么问题,或者我做错了什么?
谢谢。
【问题讨论】:
-
查看您的日志。仅加载完全符合您的预期,但您的
__str__或__repr__正在访问其他列,因此您应该看到一堆额外的 SELECT 语句,它们根据需要获取延迟属性的值。延迟属性不包含 None (或其他一些“无价值”值)。它们在访问时被延迟和加载。
标签: python sql python-3.x sqlalchemy