我想将 Motorengine 用于我的 Tornado 应用程序。正如文档中给出的,这就是我应该如何制作 ODM
from motorengine.document import Document
from motorengine.fields import StringField, DateTimeField
class Article(Document):
title = StringField(required=True)
description = StringField(required=True)
published_date = DateTimeField(auto_now_on_insert=True)
new_title = "Better Title %s" % uuid4()
def create_article():
Article.objects.create(
title="Some Article",
description="This is an article that really matters.",
callback=handle_article_created
)
def handle_article_created(article):
article.title = new_title
article.save(callback=handle_article_updated)
def handle_article_updated(article):
Article.objects.find_all(callback=handle_articles_loaded)
def handle_articles_loaded(articles):
assert len(articles) == 1
assert articles[0].title == new_title
articles[0].delete(callback=handle_article_deleted)
def handle_article_deleted(number_of_deleted_items):
try:
assert number_of_deleted_items == 1
finally:
io_loop.stop()
io_loop.add_timeout(1, create_article)
io_loop.start()
令人困惑的是,一旦创建实例,这是否会保持与数据库的一致连接?我想要对所有模型的数据库进行非阻塞 I/O 操作,所以如果它这样做不是问题。但是我不应该为用户模型实现它,我在验证时只会访问一次。是否有访问用户数据的正常方法?
另外,我不清楚一些事情:
最后两行(ioloop)到底在做什么?
我在单独的文件中声明不同的模型,我
io_loop.start()
是否每个文件都做一个?这是我觉得很奇怪的部分。
请帮帮我。谢谢。