gpt4 book ai didi

python - SQLAlchemy load_only 和 defer

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:07 28 4
gpt4 key购买 nike

我曾尝试使用 SQLAlchemy 方法 load_only 和 defer 仅从数据库发送某些列,但我似乎无法让它们工作。

这是我使用的代码:

query = db.session.query(Vendor).options(defer('ownerName', 'boxSize', 'boxes', 'lastPickUp', 'zone', 'code'))
return response( query )

*response是我根据自己应用的具体需要写的一个自定义的jsonify方法。

我期待着回应:

{

"Response": [

{

"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,

},

...

但我得到的是:

{

"Response": [

{

"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')

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

关于python - SQLAlchemy load_only 和 defer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21145702/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com