Django (nonrel)、App 引擎和异步数据库调用

发布于 2024-12-06 11:08:32 字数 57 浏览 1 评论 0原文

将 Google App Engine 与 Django-nonrel 结合使用时,有没有办法利用

When using Google App Engine with Django-nonrel, is there any way to take advantage of the Async Datastore API when I declare my model classes with the Django API?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人间不值得 2024-12-13 11:08:32

好的,我进行了更多研究,找到了一种替代方法来处理 Django 模型(即:那里的所有 Django 功能)并且仍然可以访问异步 API...

主要是直接使用数据存储:

from google.appengine.api import datastore

而且我已经有方法将我的所有模型转换为 json 字典/从 json 字典转换,因此,主要是发现 Django-Nonrel 在幕后如何做到这一点的问题:

例如:

考虑使用 to_json 和 from_json 方法的“Project”类(即:创建从字典)

用于执行一个简单的查询(似乎 Run() 会异步执行工作,因此,可以执行 query.Run() ,然后启动另一个 query.Run() ,两者会同时工作):

query = datastore.Query(Project._meta.db_table)
for p in query.Run():
    p['id'] = c.key().id() #Convert from app engine key
    print Project.from_json(p)

现在,使用 API 异步获取对象:

from djangoappengine.db.compiler import create_key
async = datastore.GetAsync(create_key(Project._meta.db_table, project_id))
p = async.get_result()
p['id'] = c.key().id() #Convert from app engine key
print Project.from_json(p)

因此,可以使用 Django 结构保留模型,并且在需要时一些包装器异步执行所需的工作。

Ok, I've investigated a bit more and found an alternative way to deal with having a Django Model (i.e.: all Django features there) and still having access to the async API...

Mainly, using the datastore directly:

from google.appengine.api import datastore

and I already had methods to convert all my models to/from a json dict, so, it was mostly a matter of discovering how Django-Nonrel did it behind the scenes:

E.g.:

Considering a 'Project' class with to_json and from_json methods (i.e.: create from a dictionary)

For doing a simple query (it seems Run() will do the work asynchronously, so, one could do the query.Run() and later start another query.Run() and both would work at the same time):

query = datastore.Query(Project._meta.db_table)
for p in query.Run():
    p['id'] = c.key().id() #Convert from app engine key
    print Project.from_json(p)

Now, using the API to get an object asynchronously:

from djangoappengine.db.compiler import create_key
async = datastore.GetAsync(create_key(Project._meta.db_table, project_id))
p = async.get_result()
p['id'] = c.key().id() #Convert from app engine key
print Project.from_json(p)

So, it's possible to retain the model with the Django structure and when needed some wrappers do the needed work asynchronously.

差↓一点笑了 2024-12-13 11:08:32

不可以。Django 框架提供了自己的数据存储接口,在直接支持异步调用之前,不可能进行异步调用。

No. The Django framework provides its own interface to the datastore, and until it supports asynchronous calls directly, it's not possible to make asynchronous calls.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文