RethinkDB的异步异步兼容ODM
aiorethink的Python项目详细描述
aiorethink是一个相当全面但易于使用的启用异步的对象文档映射器 对于RethinkDB。目前正在开发中。
文档:http://aiorethink.readthedocs.org(非常早期阶段)
来源:https://github.com/lars-tiede/aiorethink
简单示例
import aiorethink as ar class Hero(ar.Document): name = ar.Field(ar.StringValueType(), indexed = True)
你只需要从你自己的文件开始。不仅如此, 实际上:声明和“键入”字段是完全可选的。
很明显,您需要运行一个RethinkDB实例,并且需要一个数据库 包括文档类的表。想都帮不了你 重新思考数据库实例,但可以这样设置数据库(假设 重新思考数据库实例在本地主机上运行:
ar.configure_db_connection(db = "my_db") await ar.init_app_db()
让我们制作一个文档:
spiderman = Hero(name = "Spiderma") # declared fields can be accessed by attribute or dict interface spiderman.name = "Spierman" spiderman["name"] = "Spiderman" # third time's the charm # with the dict interface, we can make and access undeclared fields spiderman["nickname"] = "Spidey"
验证并保存到数据库:
try: await spiderman.save() # calls spiderman.validate() except ar.ValidationError as e: print("validation failed, doc not saved: {}".format(e)) # if we don't declare a primary key field, RethinkDB makes us an 'id' field doc_id = spiderman.id
从数据库加载文档:
spidey = Hero.load(doc_id) # using primary key spidey = Hero.from_query( # using arbitrary query Hero.cq(). # "class query prefix", basically rethinkdb.table("Heros") get_all("Spiderman", index = "name").nth(0) )
遍历文档的重新思考db changefeed:
async for spidey, changed_keys, change_msg in await spidey.aiter_changes(): if "name" in changed_keys: print("what, a typo again? {}?".format(spidey.name)) # change_msg is straight from the rethinkdb changes() query
功能
以下功能已全部或部分实现:
- 可选架构:声明文档类中的字段并获取序列化和 验证魔法很像你从其他odms/orms知道的。或者不 声明字段并将其与字典接口一起使用。或者混合使用 已声明和未声明字段的。
- 复杂字段(如列表、dict,甚至“子文档”)的模式 命名和键入字段就像文档一样。
- dict接口,对已声明字段和未声明字段都有效。
- 所有I/O都是异步的,使用^{TT2}$/^{TT3}$样式完成 协同路由,使用异步。
- 延迟加载和缓存(即“可等待”字段),例如引用 其他文件。
- 在文档和文档上使用async for的异步更改源 上课。aiorethink还可以帮助创建python对象 任何其他更改源。
计划的功能:
- 可能是文档类之间的显式关系(认为“has_many”等)
- 可能是模式迁移
理念
aiorethink的目标是做好以下两件事:
- 简化数据库文档和python对象之间的转换,并 方便
- 有关架构和验证的帮助
除此之外,所有的想法都试图在一个太厚的 抽象层。重新思考db的优秀python驱动程序,当然还有 令人敬畏的查询语言,永远不会远离和容易访问。自定义 对文档对象的查询应该很容易。从中获取文档对象 普通的RethinkDB查询,包括ChangeFeeds,也应该很容易。
状态
所有的想法都在发展中。api还不完整,还不稳定, 尽管现在有最重要的特性。