首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLAlchemy load_only和defer

SQLAlchemy load_only和defer
EN

Stack Overflow用户
提问于 2014-01-15 18:44:15
回答 1查看 10.2K关注 0票数 2

我尝试使用SQLAlchemy方法load_only,并推迟只从数据库发送某些列,但我似乎无法让它们工作。

下面是我使用的代码:

代码语言:javascript
运行
复制
query = db.session.query(Vendor).options(defer('ownerName', 'boxSize', 'boxes', 'lastPickUp', 'zone', 'code'))
return response( query )

*响应是我编写的自定义jsonify方法,因为我的应用程序的特定需求。

我期待你的回应:

{ “答复”:[ {“地址”:“第10和SW Alder St”、“城市”:“波特兰、或”、"id":1、“关键字”:"Tacos、墨西哥“、”纬度“:45.5206464、”经度“:-122.68157559999997、”名称“:"Taco Ted”、"phone":null、“网站”:null、} ..。

但我得到的却是:

{ “答复”:[ {“地址”:“地址”:“10 and SW Alder”、"boxSize":空、"boxes":10、“城市”:“波特兰、OR”、"id":1、“关键字”:"Tacos、墨西哥“、"lastPickUp":"01/12/2014”、“纬度”:45.5206464、“经度”:-122.68157559999997、“名称”:"Taco Ted","ownerName":null,"phone":null,“网站”:null,"zone":1 } ..。

这意味着我的推迟被忽视了。我也尝试过使用load_only来解决这个问题,但两者似乎都没有什么区别。我在这里错过了什么?

(如果有什么不同的话,我正在使用sqlite数据库进行开发。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-25 02:39:46

这不是deferred()的正确用法,这里的用例就是添加load_only()的原因。每次对deferred()的调用一次只执行一个属性;它接受许多字符串的事实与查询中的“路径”有关,这不是您在这里处理的。

load_only()将防止在初始查询中加载未命名的属性:

代码语言:javascript
运行
复制
load_only('ownerName', 'boxSize', 'boxes', 'lastPickUp', 'zone', 'code')

但是,如果jsonify方法仍然调用这些属性,比如somevendor.boxSize,它将在此时发出SQL。因此,这也取决于您如何提取属性。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21145702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档