我尝试使用SQLAlchemy方法load_only,并推迟只从数据库发送某些列,但我似乎无法让它们工作。
下面是我使用的代码:
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数据库进行开发。)
发布于 2014-01-25 02:39:46
这不是deferred()
的正确用法,这里的用例就是添加load_only()
的原因。每次对deferred()
的调用一次只执行一个属性;它接受许多字符串的事实与查询中的“路径”有关,这不是您在这里处理的。
load_only()将防止在初始查询中加载未命名的属性:
load_only('ownerName', 'boxSize', 'boxes', 'lastPickUp', 'zone', 'code')
但是,如果jsonify方法仍然调用这些属性,比如somevendor.boxSize
,它将在此时发出SQL。因此,这也取决于您如何提取属性。
https://stackoverflow.com/questions/21145702
复制相似问题