RethinkDB的异步异步兼容ODM

aiorethink的Python项目详细描述


PyPI Package latest releaseDocumentation StatusTravis CI build statuscoveralls status

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还不完整,还不稳定, 尽管现在有最重要的特性。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java附加两个数组   java如何在Extjs的不同页面中使用相同的存储   java Jung,大顶点的布局重叠,图形出现在奇怪的位置   java如何在Android中通过画布绘制圆?   java验证库设计模式选择   java研磨机未知标记“timedTests”   java Android领域子类实例方法   java使用resteasy/jaxrs从请求负载接收两种类型的数据   缓冲策略Java缓冲策略有时不能正确绘制   java跟踪棋子   密度无关像素如何在java中锐化图像缩略图?   java如何在MongoDB更新查询中编写(或)更新   java A*寻路游戏系统退出问题   java在安卓中读取xml的最佳方式是什么?   通过反射调用的方法的java抑制警告   安卓 java。语言错误:信号11(SIGSEGV),代码10(?),故障地址006e006f   java lombok 1.18.2使用DexBuilderForDebug抛出TransformClasses   java JOptionPane CD对话框按钮?   java只返回json中的一些值,而不是完整实体对象   java包不存在错误,请稍后重试