Rub*_*ich 2 python sql sqlalchemy
我尝试使用 SQLAlchemy 方法 load_only 和 defer 仅发送数据库中的某些列,但我似乎无法让它们工作。
这是我正在使用的代码:
query = db.session.query(Vendor).options(defer('ownerName', 'boxSize', 'boxes', 'lastPickUp', 'zone', 'code'))
return response( query )
Run Code Online (Sandbox Code Playgroud)
*response 是我根据应用程序的特定需求编写的自定义 jsonify 方法。
我期待着回复:
{
“回复”: [
Run Code Online (Sandbox Code Playgroud){ "address": "10th and SW Alder St", "city": "Portland, OR", "id": 1, "keywords": "Tacos, Mexican", "latitude": 45.5206464, "longitude": -122.68157559999997, "name": "Taco Ted", "phone": null, "website": null, },...
但我得到的是:
{
“回复”: [
Run Code Online (Sandbox Code Playgroud){ "address": "10th and SW Alder St", "boxSize": null, "boxes": 10, "city": "Portland, OR", "id": 1, "keywords": "Tacos, Mexican", "lastPickUp": "01/12/2014", "latitude": 45.5206464, "longitude": -122.68157559999997, "name": "Taco Ted", "ownerName": null, "phone": null, "website": null, "zone": 1 },...
这意味着我的延迟被忽略了。我也尝试过使用 load_only 来解决这个问题,但它们似乎都没有什么区别。我在这里缺少什么?
(如果有什么区别的话,我正在使用 sqlite 数据库进行开发。)
这不是正确的用法deferred(),您这里的用例就是load_only()添加的原因。每次调用deferred()一次只执行一个属性;它接受许多字符串的事实与查询中的“路径”有关,这不是您在这里处理的内容。
load_only() 将阻止在初始查询中加载未命名的属性:
load_only('ownerName', 'boxSize', 'boxes', 'lastPickUp', 'zone', 'code')
Run Code Online (Sandbox Code Playgroud)
但是,如果您的 jsonify 方法仍然调用这些属性,例如somevendor.boxSize,它将在此时发出 SQL。所以这也取决于你如何提取属性。
| 归档时间: |
|
| 查看次数: |
13615 次 |
| 最近记录: |