皮蒙哥岛上一种非常薄的类似虫子的包装物。

mongorm的Python项目详细描述


Mongorm

mongorm是一个非常薄的odm层,位于pymongo之上 允许您创建表示MongoDB文档的类。

它旨在为您提供^ {TT2}$的所有灵活性,以及一些 方便的特性,例如属性样式(user.name)访问 领域。

开始

建议通过pip安装mongorm, pip install mongorm

mongorm只有一个类供您导入:

>>> from mongorm import Database

您可以通过mongodb uri连接到数据库:

>>> db = Database(uri='mongodb://localhost:27017/some_db')

或使用主机端口DB组合:

>>> db = Database(host='localhost', port=27017, db='some_db')

如果任何关键字参数不匹配,或者缺少uri 数据库名称,默认值如下:

  • host:'本地主机'
  • port:27017
  • db:'测试'

数据库类

Database类有以下方法:

  • authenticate:与pymongo的工作原理相同
  • drop:删除数据库
  • drop_collection:删除集合
  • get_collections:获取数据库中集合的列表

以及以下(只读)属性:

  • host:MongoDB主机
  • port:MongoDB端口
  • name:数据库名称

您可以使用db.__client__和 带有db.__db__pymongo.database实例。最终,普通 可以从db对象本身访问操作。

dotdict

DotDict类是python默认dict的包装 允许属性样式访问dict键值对。换句话说, 以下访问是相同的:

>>> d = DotDict({'hello': 'world'})
>>> print d['hello']
world
>>> print d.hello
world

mongorm.Documents从中继承以获得此功能。如果你愿意 希望能够使用 属性样式访问,将它们声明为mongorm.DotDicts 第页,共页。

定义模型

使用配置好的数据库,如上所述,您可以将模型声明为:

class SomeClass(db.Document):
    pass

这些模型将从^{tt8}继承数据库连接$ 实例。

下面演示^{tt26}的一些特性$ 上课。

from mongorm import Field

class User(db.Model):
    # Override the collection name
    # Defaults to the underscored version of the class name
    __collection__ = 'auth_user'

    # Enforce validation on certain fields
    # All fields in this dict are considered required
    __fields__ = {

        # user.username is a required field of type str, without a default
        'username': Field.required(str),

        # user.age is a required field, with a default value
        'age': Field.required(int, 12)

        # user.name is an optional field
        'name': Field.optional(str),

        # Nested document
        'nested': {
            'key_a': Field.required(str),
            'key_b': Field.optional(int)
        }

        # List. Note that list elements are ALWAYS treated as optional
        'a_list': [ Field.optional(int) ]

        # List of objects
        'b_list' = [ {
            'key_a': Field.required(str),
            'key_b': Field.optional(int)
        } ]

    }

    # Specify indices
    # These are directly passed to pymongo's collection.ensure_index
    __indices__ = [

        # Normal index over name field
        Index('name'),

        # Descending index over age
        Index([('age': pymongo.DESCENDING)]),

        # Compound index
        Index([('age', pymongo.DESCENDING), ('name', pymongo.ASCENDING)]),

    ]

    # Override the validate function
    # This gets called before a save operation
    # Error conditions should throw exceptions
    def validate(self):
        if self.age < 18:
            raise CannotLegallyDrinkError

Document类还有一些有用的/基本的方法:

  • dump_dict:返回一个dict,其中的键具有驼峰格式的名称
  • dump_json:将上述dict转储为json
  • load_dict:从dict更新self;它将所有键转换为 带下划线的名称
  • load_json:将json解组到dict中执行上述操作 操作
  • save:保存文档
  • delete:从集合中删除文档
  • validate_fields_extra:根据dict验证字段 进来了。dict使用与上面字段相同的格式。这个 方法可用于使某些字段仅在特定的 情况。

以及下面的@classmethods:

  • from_json:返回用 输入json
  • find:调用pymongo.collection'sfind
  • find_one:调用pymongo.collection'sfind_one

此外,以下方法将传递给 pymongo.collection实例:

  • aggregate
  • count
  • create_index
  • ensure_index
  • drop_index
  • drop_indexes
  • index_information
  • reindex
  • group
  • distinct
  • write_concern
  • find_and_modify

任何参数都逐字传递给pymongo.collection 请参阅pymongos文档。

贡献

所有的发展都发生在 GitHub。请随时报告 有问题。

如果您想贡献代码,请注意以下几点:

  • 该项目是bsd许可的,不是copyleft
  • 请关闭master分支,不要发布任何其他 可能存在
  • 的分支
  • 确保遵循惯例
  • 胃肠道thub pull请求很好,补丁也可以通过电子邮件发送到r@hul.ag

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

推荐PyPI第三方库


热门话题
java无法将PowerMockito与PowerMockRunnerDelegate设置为SpringJUnit4ClassRunner一起使用   java如何将对象转换为Inputstream   java从Firebase数据库获取用户对象   java从JSON Android获取Int值   arraylist定义Java中用户定义类的二进制搜索   使用Java将参数附加到url   javascript屏蔽ui wicket数据源   Wicket上的java单选按钮在组中不起作用   具有自签名证书的java SSLHandshakeException   如何编写Java程序来打开特定的文件扩展名(.pef)?   Akka 2.3.14和Java 7如何配置TLS   部署servlet时spring“java.lang.IllegalStateException:无ServletContext集”   java如何在eclipse:eclipse之后在maven中执行代码?   第一个位置没有空格的java正则表达式   java在单个节点的Spark中运行计算