终极MongoDB对象文档映射器

picomongo的Python项目详细描述


比Minimongo快,比Micromongo轻,欢迎使用DailyMotion的终极Mongo ODM Picomongo。

开始

要从picomongo开始,只需导入它即可:

>>> from picomongo import Document, ConnectionManager
>>> ConnectionManager.configure()

准备好了,我们定义一个文档:

>>> class UserDocument(Document):
...     pass
>>> user = UserDocument({'name': 'Mike'})
>>> user
UserDocument({'name': 'Mike'})
>>> user.name
'Mike'
>>> user.save()

你:等等,等等,我的文件在哪里?

别担心,为了方便您的工作,picomongo使用以下默认值:

  • mongo uri:'mongodb://localhost'
  • 数据库:“测试”
  • 集合:您的文档类名(小写)

您可以访问这些值,它们是传统的pymongo对象:

>>> UserDocument.con
Connection('localhost', 27017)
>>> UserDocument.db
Database(Connection('localhost', 27017), u'test')
>>> UserDocument.col
Collection(Database(Connection('localhost', 27017), u'test'), u'userdocument')

有一件事你应该永远记住,你总是需要调用configure才能保存/检索你的文档。如果要使用默认配置,只需调用不带参数的configure,否则请参见下文(部分配置时间)。

提示:您可以在声明文档之后、文档保存/检索之前调用configure。

您可以像处理传统pymongo对象那样使用它们,例如,您可以使用传统集合检索用户:

>>> UserDocument.col.find_one()
{u'_id': ObjectId('4eb2cae58250f05eb4000000'), u'name': u'Mike'}

你:但是等等,为什么我要听写,我要的是一个对象。

别担心,这更简单:

>>> user2 = UserDocument.find_one()
UserDocument({u'_id': ObjectId('4eb2cae58250f05eb4000000'), u'name': u'Mike'})
>>> user2.name
u'Mike'

但是这个自动配置是什么时候完成的?一旦你试图接近他们。

配置集合

您可以配置将在哪个集合上保存文档。如果要配置,可以重写自定义文档类中的集合名称。示例:

>>> class CustomDocument(Document):
...     collection_name = 'my_custom_collection'
>>> custom = CustomDocument()
>>> custom.col
Collection(Database(Connection('localhost', 27017), u'test'), u'my_custom_collection')

配置时间

一旦你使用了它,让我们看看Picomongo最强大的部分,配置。

所有配置都存储在connectionmanager:

>>> from picomongo import Document, ConnectionManager

您可以通过使用配置调用configure方法来添加自己的配置。配置格式为:

{'_default_': {'uri': 'default_uri', 'db': 'default_db'},
 'document_name': {'uri': 'specific_uri', 'db': 'specific_db', 'col': 'default_col'},
 'document_name2': ...,}

uri必须是本文档页中描述的有效mongodb连接uri:http://www.mongodb.org/display/DOCS/Connections

配置中不需要任何内容,Picomongo将使用一些规则来计算最终配置:

  • 在默认配置中:
    • 如果不存在uri,请使用“mongodb://localhost”
    • 如果数据库不存在,请使用“测试”
  • 在文档配置中:
    • 如果不存在uri,请使用默认uri
    • 如果数据库不存在,请使用默认数据库
    • 如果未预设列,请使用文档类名

您可以使用以下语法访问配置:

>>> ConnectionManager.get_config('_default_')   # Access default configuration
>>> ConnectionManager.get_config('document')    # Access configuration for document named 'document'

下面是一些配置示例:

  • 更改默认数据库:

    >>> ConnectionManager.configure({'\_default\_': {'db': 'other_db'}})
    >>> ConnectionManager.get_config('\_default\_').db
    Database(Connection('localhost', 27017), u'other_db')
    
  • 在另一个MongoDB实例中存储一些文档:

    >>> ConnectionManager.configure({'document1': {'uri': 'mongodb://127.0.0.1:8000'}})
    >>> ConnectionManager.get_config('_default_').con
    Connection('localhost', 27017)
    >>> ConnectionManager.get_config('document1').con
    Connection('localhost', 8000)
    

提示:最后一个例子肯定会失败,因为picomongo在配置期间尝试连接到这个uri(而且您可能没有在这个uri上运行mongodb实例)。

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

推荐PyPI第三方库


热门话题
java什么是VMObject?   java将数据插入H2数据库表   java如何修改保存在一个卡夫卡主题中的Twitter API消息并将其发送到另一个卡夫卡主题   对象Java变量别名解决方法   java返回数组在try/catch中初始化   java DateTimeFormat shortDate无年份   java我如何在recycle应用程序的首次发布中突出显示项目   java使文本区域包含大量文本,其帧响应更快   类抛出的java ClassCircularyError。forName在转换TwoStacksPlainDatagramSocketImpl类时   swing如何在GroupLayout Java中设置Jframe背景图像   sip无法在独立java应用程序上运行PJSIPJNI包装   java Android internet连接问题   java当单击按钮VerEstoque时,应用程序停止。代码上有Logcat错误,请输入h3lp   java如何在JFrame上设置图像图标动画图像将加载但不会更改   与socket一起使用时,java错误的currentTimeMillis()   Java内部字符串表示:是UTF16吗?