umongo的数据存储框架实现

udatastore的Python项目详细描述


μDatastore:Google云数据存储的ODM

作为框架在μMongo库中实现(一个用于mongodb的python odm)

在使用Google云数据存储时,我们的大多数代码使用google-cloud-datastore包, 用于创建、更新和查询实体我们经常发现自己编写代码来导出对象 到datastore.Entity,并从实体导入到对象在AppEngine上,有ndb可以避免这一点, 因此,我们产生了自己为数据存储创建ODM的想法

在使用μmongo之前,我们创建了一个原型,它实现了一个基于 以下约定:

  • 数据存储分区(项目/命名空间)对应于Mongo数据库
  • 数据存储实体类型对应于mongo集合
  • 数据存储区__key__字段对应于mongo _id字段

安装

pip install udatastore

示例

fromdatetimeimportdatetimefromgoogle.cloudimportdatastorefromudatastoreimportDataStoreInstancefromumongoimportDocument,fields,validatedb=datastore.Client(project="dummy",namespace='abcd')instance=DataStoreInstance()instance.init(db)@instance.registerclassUser(Document):email=fields.EmailField(required=True,unique=True)birthday=fields.DateTimeField(validate=validate.Range(min=datetime(1900,1,1)))friends=fields.ListField(fields.ReferenceField("User"))goku=User(email='goku@sayen.com',birthday=datetime(1984,11,20))goku.commit()vegeta=User(email='vegeta@over9000.com',friends=[goku])vegeta.commit()vegeta.friends# <object umongo.data_objects.List([<object udatastore.reference.DataStoreReference(document=User, pk=<Key('User', 4476), project=dummy>)>])>vegeta.dump()# {'email': 'vegeta@over9000.com', 'id': '4477', 'friends': [<Key('User', 4476), project=dummy>]}User.find_one({"email":'goku@sayen.com'})# <object Document __main__.User({'email': 'goku@sayen.com', 'id': 4474,#                                 'friends': <object umongo.data_objects.List([])>,#                                 'birthday': datetime.datetime(1984, 11, 20, 0, 0)})>

限制:

并非μMongo的所有功能在μDatastore中都可用或工作完全相同:

  • 无索引
  • 我们目前不支持所有字段类型
  • 数据存储将任何datetime转换为UTC时区。目前,μDatastore重写此行为并始终与 不知道约会时间。
  • 我们带来了自己的ReferenceField实现。您可以使用umongo.fields.ReferenceField,作为DataStoreBuilder 将自动用我们的实现替换这些字段。我们还禁用了对引用字段的IO\U验证。 因为数据存储最终是一致的,所以在创建对以前创建的实体的引用时可能会报告错误

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

推荐PyPI第三方库


热门话题
从Java中的方法返回列表时遇到问题   java如何忽略json字段,并使用Jackson ObjectMapper获取其值以进行映射   spring通过更新其各自java对象的值来映射两个xsd文件   java从HttpClient获取500错误,在浏览器中工作   java使用物理键输入(耳机中的按钮)在安卓中执行一些操作   如何在int数组(java)中追加int?   java Spring RequestParam的默认值等于方法调用   java将JsonLayout添加到log4j2 json配置   Ubuntu上的maven Tomcat6 libs和/usr/share/java   java单元测试Android活动   java获取URL证书的屏幕截图   java如何为自定义类加载器加载的类提供工具?   FB墙上的java错误图片,来自安卓应用程序的反馈帖子(安卓 FB sdk)   从Intellij IDEA内部运行Tomcat时的java差异?   java TDD与不可能的例外   安卓 Java日期表示差异