同步/异步MongoDB ODM,是的。
项目描述
μMongo: 同步/异步ODM
μMongo是Python MongoDB ODM。它的诞生源于两个需求:缺乏异步ODM以及使用现有ODM进行文档(反)序列化的困难。
从这一点出发,μMongo做出了一些设计选择
尽可能接近MongoDB驱动标准,以保持相同的API:使用find({"field": "value"})像往常一样,但以优雅的OO封装检索您的数据!
与多个驱动程序(目前包括PyMongo、TxMongo、motor_asyncio和mongomock)一起工作
与Marshmallow序列化库紧密集成,以便轻松地将数据导入和导出到外部世界
国际化集成以本地化验证错误消息
自由软件:MIT许可证
测试覆盖率90%+;-)
µMongo需要MongoDB 4.2+和Python 3.7+。
快速示例
import datetime as dt
from pymongo import MongoClient
from umongo import Document, fields, validate
from umongo.frameworks import PyMongoInstance
db = MongoClient().test
instance = PyMongoInstance(db)
@instance.register
class User(Document):
email = fields.EmailField(required=True, unique=True)
birthday = fields.DateTimeField(validate=validate.Range(min=dt.datetime(1900, 1, 1)))
friends = fields.ListField(fields.ReferenceField("User"))
class Meta:
collection_name = "user"
# Make sure that unique indexes are created
User.ensure_indexes()
goku = User(email='goku@sayen.com', birthday=dt.datetime(1984, 11, 20))
goku.commit()
vegeta = User(email='vegeta@over9000.com', friends=[goku])
vegeta.commit()
vegeta.friends
# <object umongo.data_objects.List([<object umongo.dal.pymongo.PyMongoReference(document=User, pk=ObjectId('5717568613adf27be6363f78'))>])>
vegeta.dump()
# {id': '570ddb311d41c89cabceeddc', 'email': 'vegeta@over9000.com', friends': ['570ddb2a1d41c89cabceeddb']}
User.find_one({"email": 'goku@sayen.com'})
# <object Document __main__.User({'id': ObjectId('570ddb2a1d41c89cabceeddb'), 'friends': <object umongo.data_objects.List([])>,
# 'email': 'goku@sayen.com', 'birthday': datetime.datetime(1984, 11, 20, 0, 0)})>
现在获取
$ pip install umongo # This installs umongo with pymongo $ pip install my-mongo-driver # Other MongoDB drivers must be installed manually
或者与您计划使用的MongoDB驱动程序一起获取
$ pip install umongo[motor] $ pip install umongo[txmongo] $ pip install umongo[mongomock]
历史
3.1.0 (2021-12-23)
功能
将字段列表添加到Document和EmbeddedDocument.__dir__()中(见#367)。
错误修复
通过比较None来测试数据库,而不是转换为bool,以防止pymongo >= 4抛出的异常(见#366)。
3.0.1 (2021-10-16)
错误修复
修复ListField.insert:触发set_modified,使用内部字段反序列化(见#364)。
3.0.0 (2021-01-11)
功能
修复容器字段(DictField、ListField、NestedField)生成的marshmallow字段的国际化(见#329)。
不要将字段元数据作为kwargs传递(已在marshmallow 3.10.0中弃用),而是作为metadata参数传递(见#328)。
错误修复
修复对引用、列表和嵌入式文档中None的IO验证(见#330)。
添加_dict_io_validate以通过DictField传播IO验证(见#335)。
其他更改
不向后兼容:要求marshmallow >= 3.10.0(见#328)。
3.0.0b14(2020-12-08)
功能
为每个框架提供Instance子类,以帮助用户将数据库从umongo 2迁移到umongo 3(见#319)。
不向后兼容:将嵌入式文档解析推迟到EmbeddedField中,以便在注册之前将嵌入式文档作为字符串传递。现在在运行时而不是注册时检测EmbeddedField中的未知嵌入式文档错误。此外,索引现在在第一次使用时收集,而不是在注册时收集,应通过Document.indexes缓存的属性而不是Document.opts.indexes来访问。 (见#322)
不向后兼容:使BaseSchema有序。这修复了嵌入式文档的查询。同时使BaseMarshmallowSchema有序。 (见#323)
不向后兼容:使RemoveMissingSchema可取消选择。默认情况下,生成的纯marshmallow模式现在会跳过来自Document实例的缺失值,而不是返回None。可以通过设置MA_BASE_SCHEMA_CLS来更改此设置。 (见#325)
3.0.0b13(2020-11-23)
错误修复
修复了3.0.0b12中引入的错误,该错误阻止了以DB作为参数进行实例初始化,如instance = PyMongoInstance(db)。 (见#318)
3.0.0b12(2020-11-16)
功能
不向后兼容:重新设计Instance:将BaseInstance、Instance和LazyLoaderInstance合并为一个单一的抽象Instance类。从Instance中删除templates参数。将Instance.init重命名为Instance.set_db。不要在umongo顶层模块中重新发布具体的框架实例。 (见#314)
将session上下文管理器添加到PyMongoInstance和MotorAsyncIOInstance。这允许使用来自umongo的会话相关功能(因果一致读取、事务)。 (见#315)
3.0.0b11(2020-11-06)
功能
不向后兼容:允许在Document和EmbeddedDocument实例上设置任意属性。此更改是重构的一部分,旨在简化对文档对象的set / get / delete操作,并略微提高性能。 (见#272)
使用与DuplicateKeyError一起提供的结构化信息,而不是解析错误消息字符串(见#309)。
将replace参数添加到commit方法中,以便强制写入整个文档而不是更新(见#310)。
其他更改
支持Python 3.9(见#311)。
向后不兼容:弃用对motor<2.0.0的支持(见#312)。
向后不兼容:弃用对MongoDB<4.2的支持(见#313)。
3.0.0b10(2020-10-12)
功能
允许在查询中传递Document和EmbeddedDocument。(见#303)
3.0.0b9(2020-10-05)
功能
添加对motor 2.2的支持(见#294)。(从2.3.0中选取。)
向后不兼容:添加ExposeMissing上下文管理器,在导出时返回missing而不是None。将FromUmongoSchema替换为RemoveMissingSchema。此模式在导出时通过内部使用ExposeMissing来删除缺失的字段。通过要求用户指定RemoveMissingSchema为MA_BASE_SCHEMA_CLS来启用此功能。(见#261)
向后不兼容:从Schema.as_marshmallow_schema中移除mongo_world参数。此方法生成的模式旨在(反)序列化umongo对象,而不是直接从数据库中序列化(反序列化)dict。(见#299)
向后不兼容:移除umongo.Schema。模式应继承自umongo.abstract.BaseSchema。将RemoveMissingSchema公开为umongo.RemoveMissingSchema。(见#301)
其他更改
向后不兼容:弃用对Python 3.6的支持(见#298)。
3.0.0b8(2020-07-22)
功能
让Document继承自EmbeddedDocument(见#266)。
添加允许Document和EmbeddedDocument从mixin对象继承字段和前后方法的MixinDocument。(见#278)
向后不兼容:移除BaseInstance.register方法的as_attribute参数。文档不能再作为实例属性通过名称访问。(见#290)
错误修复
修复将None传递给具有_required_validate方法的字段(见#289)。
3.0.0b7(2020-05-08)
功能
向后不兼容:撤销在3.0.0b6中引入的损坏功能,该功能允许从mixin类获取字段(见#273)。
向后不兼容:移除allow_inheritance选项。任何Document或EmbeddedDocument都可以被继承(见#270)。
向后不兼容:Field在传递缺失的kwarg时引发DocumentDefinitionError而不是RuntimeError,而当传递给数据库中不存在的文档的conditions时,Document.commit引发NotCreatedError(见#275)。
3.0.0b6(2020-05-04)
功能
向后不兼容:abstract在EmbeddedDocument中的行为与Document一致。仅在具体嵌入式文档子类化具体嵌入式文档时才添加_cls / cls字段。并且EmbeddedField只接受具体嵌入式文档。(见#86)
Document和EmbeddedDocument可以从mixin类继承。mixin类应首先(最左边)出现在基类中:class MyDocument(MyMixin, Document)。(见#188)
其他更改
向后不兼容:代码中的marshmallow导入都作为import marshmallow as ma执行。为了方便,missing和ValidationError仍可以作为umongo.missing和umongo.ValidationError导入。
3.0.0b5(2020-04-30)
功能
向后不兼容:向 Document 和 EmbeddedDocument 添加 MA_BASE_SCHEMA_CLS 类属性,用于在 as_marshmallow_schema 中指定基类。删除 as_marshmallow_schema 的 check_unknown_fields、params 和 meta 属性。将 mongo_world 设置为关键字参数。使用基模式类可以达到相同的效果。这意外地修复了 as_marshmallow_schema 缓存功能。(见 #263)
向后不兼容:添加 TxMongoDocument.find_with_cursor 并停止对上游已弃用的 find(cursor=True) 的支持。(见 #259)。
其他更改
向后不兼容:要求 txmongo>=19.2.0(见 #259)。
3.0.0b4(2020-04-27)
功能
向后不兼容:删除部分加载功能(见 #256)。
向后不兼容:添加 Document.pk_field 并删除 BaseDataProxy.*_by_mongo_name 方法(见 #257)。
向后不兼容:当修改已创建文档的 pk 时引发 AlreadyCreatedError(见 #258)。
3.0.0b3(2020-04-26)
功能
向后不兼容:将 ReferenceError 替换为 NoneReferenceError。审查从根 umongo 模块可导入的异常列表。(见 #251)
错误修复
在调用 set_by_mongo_name 时,如果字段未在部分加载中加载,则不要修改数据。(见 #253)
其他更改
向后不兼容:删除对 Python 3.5 的支持(见 #248)。
3.0.0b2(2020-04-18)
功能
在 DictField 中使用字段作为键/值(见 #245)。
错误修复
修复 BaseField.__repr__(见 #247)。
3.0.0b1(2020-03-29)
功能
支持 marshmallow 3(见 #154)。
所有以 "marshmallow_" 开头的字段参数都传递给 marshmallow 模式,而不是仅传递已知参数列表。(见 #228)
其他更改
向后不兼容:删除对 marshmallow 2 的支持。请参阅 marshmallow 升级指南,以获取更改的完整列表。(见 #154)
向后不兼容:由于 marshmallow 现在提供 NaiveDateTimeField 和 AwareDateTimeField,因此删除 StrictDateTimeField。(见 #154)
向后不兼容:现在应提供反序列化形式的 default。(见 #154)
2.3.0 (2020-09-06)
功能
添加对 motor 2.2 的支持(见 #294)。
2.2.0 (2019-12-18)
错误修复
修复 find/find_one:将 filter 作为第一个位置参数传递(见 #215)。
其他更改
支持 Python 3.8(见 #210)。
2.1.1 (2019-10-04)
错误修复
修复 ObjectId 奖励字段:在反序列化时捕获 TypeError(见 #207)。
2.1.0 (2019-06-19)
功能
通过向 MotorAsyncIODocument 类添加 count_documents 类方法来添加对 motor 2.+ 的支持。 count_documents 尝试根据已安装的驱动程序版本透明地使用正确的 motor 调用签名。请注意,由 MotorAsyncIODocument.find 返回的游标对象的行为严格遵循底层驱动程序提供的接口。
2.0.5 (2019-06-13)
错误修复
确保 Reference 和 GenericReference 字段往返(见 #200)。
2.0.4 (2019-05-28)
错误修复
在 BaseDataProxy.get_modified_fields 和 BaseDataProxy.get_modified_fields_by_mongo_name 中包含修改后的 BaseDataObject(见 #195)。
在 List.is_modified 中始终返回布尔值(见 #195)。
List:当使用内置的 del 操作符删除元素时调用 set_modified(见 #195)。
2.0.3 (2019-04-10)
错误修复
修复 StrictDateTimeField 中当毫秒四舍五入到 1 秒时的毫秒溢出(见 #189)。
2.0.2 (2019-04-10)
错误修复
修复在DateTimeField和LocalDateTimeField中毫秒四舍五入到1秒时的毫秒溢出问题(参见#189)。
2.0.1 (2019-03-25)
错误修复
修复包含重写_deserialize_from_mongo字段的EmbeddedDocument的反序列化问题(参见#186)。
2.0.0 (2019-03-18)
功能
不兼容回退:umongo字段中不再使用missing属性,只使用default。可以使用marshmallow_missing和marshmallow_default属性来覆盖使用as_marshmallow_field方法返回的纯marshmallow字段中的值(参见#36和#107)。
不兼容回退:as_marshmallow_field不再将load_from、dump_to和attribute传递给纯marshmallow字段。它只传递validate、required、allow_none、dump_only、load_only和error_messages,以及从umongo的default推断出的default和missing值。umongo字段中以marshmallow_为前缀的参数传递给纯marshmallow字段,并覆盖其非前缀对应项。(参见#170)
不兼容回退:DictField和ListField不默认为空Dict/List。为了保持旧行为,请传递默认的dict/list。 (参见#105)
不兼容回退:序列化空Dict/List为空,而不是缺失(参见#105)。
将DateTimeField、LocalDateTimeField和StrictDateTimeField中的日期时间四舍五入到毫秒精度,以保持对象和数据库表示的一致性(参见#172和#175)。
添加DateField(参见#178)。
错误修复
修复将默认值作为原始Python dict/list传递给DictField/ListField的问题(参见#78)。
字段的default参数将被反序列化和验证(参见#174)。
其他更改
支持Python 3.7(参见#181)。
不兼容回退:取消对Python 3.4的支持(参见#176),并在asyncio框架中仅使用async/await协程样式(参见#179)。
1.2.0 (2019-02-08)
将Schema缓存添加到as_marshmallow_schema(参见#165)。
添加DecimalField。此字段仅适用于MongoDB 3.4+。(参见#162)
1.1.0 (2019-01-14)
修复在Document子类的find查询中按id筛选时的错误(参见#145)。
修复__getattr__以允许复制和深拷贝Document和EmbeddedDocument(参见#157)。
添加Document.clone()方法(参见#158)。
1.0.0 (2018-11-29)
当在数据库中找到未知字段且未使用BaseNonStrictDataProxy时,引发UnknownFieldInDBError(参见#121)
修复使用mongomock时使用WrappedCursor的垃圾收集器中的(非致命)崩溃
依赖于pymongo 3.7+(参见#149)
将as_marshmallow_schema params传递给嵌套模式。自这次更改以来,每个字段的as_marshmallow_schema方法都应该期望未知**kwargs(参见#101)。
将参数传递给ListField.as_marshmallow_schema中的容器字段(参见#150)
将meta关键字参数添加到as_marshmallow_schema以传递用于模式Meta类的属性字典(参见#151)
0.15.0 (2017-08-15)
将(嵌入式)DocumentOpts中的strict选项添加,允许从Mongo加载具有未知字段的文档(参见#115)
修复当allow_none为True时字段序列化和反序列化的问题(参见#69)
修复从另一个ReferenceField分配ReferenceFild的问题(见#110)
修复通过属性代理的字段删除问题(见#109)
修复StrictDateTime奖金字段:_deserialize不接受datetime.datetime实例(见#106)
向Reference.fetch添加force_reload参数(见#96)
0.14.0 (2017-03-03)
修复mashmallow标签处理中的错误(见#90)
修复DataProxy.set中的allow none(见#89)
支持motor 1.1(见#87)
0.13.0 (2017-01-02)
修复嵌套EmbeddedDocuments的序列化错误(见#84, #67)
向EmbeddedDocument添加
和 选项 移除buggy
的 参数(见#73, #74)
0.12.0 (2016-11-11)
用
替换 并修复孙子继承问题(见#66) 修复motor 1.0发布后与破坏API的依赖关系
0.11.0 (2016-11-02)
data_objects Dict和List继承自内置的dict和list
Document&EmbeddedDocument将初始化期间传入的字段存储为修改过的(见#50)
嵌套文档内的必填字段处理正确(见#61)
Document支持marshmallow的预处理和后处理
0.10.0 (2016-09-29)
添加预/后更新/插入/删除钩子(见#22)
使用schema.as_marshmallow_schema()和field.as_marshmallow_field()提供Umongo到Marshmallow schema/field的转换(见#34)
列表和字典现在继承自collections的UserList和UserDict而不是内置类型(否则需要解决元编程冲突)
DeleteError和UpdateError返回驱动结果对象而不是原始错误字典(除motor外,它只有原始错误字典)
0.9.0 (2016-06-11)
查询现在可以使用文档的字段名称而不是数据库中的名称来表示
在使用之前也需要由一个实例进行注册
0.8.1 (2016-05-19)
用
替换 (见#14)
0.8.0 (2016-05-18)
项目进行了大量重写,API损坏严重
文档现在首先作为模板定义,然后在实例内部实现
DALs已被框架的Builder实现所取代
修复Pymongo.Cursor包装器的<__getitem__>
向Document.commit添加
参数 向txmongo添加
方法
0.7.8 (2016-4-28)
修复setup.py样式,防止发布版本0.7.7
0.7.7 (2016-4-28)
修复与Reference.fetch相关的await错误
Pymongo现在仅在umongo的额外版本中安装
0.7.6 (2016-4-28)
使用extras_require与umongo一起安装驱动
0.7.5 (2016-4-23)
修复motor-asyncio的await(Python >= 3.5)支持
0.7.4 (2016-4-21)
修复setup.py中缺失的包
0.7.3 (2016-4-21)
修复setup.py样式,防止发布
0.7.2 (2016-4-21)
修复在EmbeddedDocument上生成索引时的崩溃
0.7.1 (2016-4-21)
修复setup.py不安装测试包
传递状态到Beta
0.7.0 (2016-4-21)
添加i18n支持
添加MongoMock支持
文档已经大幅扩展
0.6.1 (2016-4-13)
将
_lazy_loader添加到配置Document的lazy_collection
0.6.0 (2016-4-12)
各方面都有重大改进!
0.1.0 (2016-1-22)
PyPI上的首个版本。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源分布
构建分布
umongo-3.1.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 20c72f09edae931285c22c1928862af35b90ec639a4dac2dbf015aaaac00e931 |
|
MD5 | 028652a4b586acd7558d3a9e77d1b686 |
|
BLAKE2b-256 | b55dbf978380cd25d837c8def3e1841b4f4f997037be52c9de81792fcee96dac |
umongo-3.1.0-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f6913027651ae673d71aaf54285f9ebf1e49a3f57662e526d029ba72e1a3fcd5 |
|
MD5 | 9e696950ac843a82d9bc2ea4c479c2ca |
|
BLAKE2b-256 | a901d120ee849d86f4e4360cd66f05ab7672fcf7f0549bd88cc8ab092b962949 |