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是安卓的子类。所容纳之物ClipData或ClipData。项目   毕加索中的java错误get()无法应用于(安卓.content.Context)   管道接受来自控制台和管道文本文件的Java输入   Java Windows文件权限   java如何在Selenium中找到此按钮?我尝试了partiallinktext并多次尝试cssSelector   java如何在spring jdbc模板中生成流式sql?   方法中的java全局值变为null   java设备“Mobile Intel(R)4 Series Express芯片组系列”(\\.\DISPLAY1)初始化失败:   java查找单独文件夹中的资源到类文件   java iCal4j添加会议说明   java如何处理InvalidTokenException?   oop如果Java不支持运算符重载,增量运算符如何在整数实例上工作?   java如何在Hibernate中获取<map>