`
superisaac
  • 浏览: 64159 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mongopie,Mongodb的python object mapping

阅读更多
MongoPie是个轻量级的开源python mongodb mapping. 目的是使用Object-Relational Mapping 类似的技术简化mongodb的编程,可以通过继承Model来实现mongodb 的schema.

比如,我们要实现一个简单的标签系统,首先定义Model
class UserTag(mongopie.Model):
    ''' 用户的标签云 '''
    user = mongopie.StringField()
    tag = mongopie.StringField()
    count = mongopie.IntegerField(default=0)

class Vote(mongopie.Model):
    ''' 一次投票,voter在created_at时间给votee的tag标签投了一票'''
    voter = mongopie.StringField()
    votee = mongopie.StringField()
    tag = mongopie.StringField()
    created_at = mongopie.DateTimeField(auto_now=True)



定义好Model后,可以通过方法实现两个类的关联,Vote对象有个on_created方法, 在每个Vote对象被创建并放在数据库后会自动调用. 重载此方法
class UserTag(mongopie.Model):
    ......
    @classmethod
    def add_tag(cls, vote):
        ut = cls.find_one(user=vote.votee,
                          tag=vote.tag)
        if not ut:
            ut = cls()
            ut.user = vote.votee
            ut.tag = vote.tag
        ut.count += 1
        ut.save()
        return ut

class Vote(mongopie.Model):
    ......
    def on_created(self):
        UserTag.add_tag(self)


这样每当一个投票产生后,UserTag对应的count会加一.

def make_vote(voter, votee, tag):
    v = Vote()
    v.voter = voter
    v.votee = votee
    v.tag = tag
    v.save()
    return v

def test():
    # Tom 给Jack的hacking 投了一票
    make_vote('Tom', 'Jack', 'Hacking')
     # Jerry 给Jack的Food 投了一票
    make_vote('Jerry', 'Jack', 'Food')
     # Jerry 也给Jack的Hacking投了一票
    make_vote('Jerry', 'Jack', 'Hacking')

    for ut in UserTag.find(user='Jack'): # 找出Jack所有的投票
        print ut.get_dict()

#输出结果是
{'count': 2, '_id': ObjectId('4eecbce5347307034e000001'), 'tag': u'Hacking', 'user': u'Jack'}
{'count': 1, '_id': ObjectId('4eecbce5347307034e000003'), 'tag': u'Food', 'user': u'Jack'}



完整的实例请看 mongopie_test.py

开源项目地址在 https://github.com/superisaac/mongopie


0
0
分享到:
评论

相关推荐

    Python-Mongo同步异步MongoDBODM

    在Python中,MongoDB Object Data Mapping (ODM) 是一种将数据模型转换为MongoDB文档的技术,它允许开发者以面向对象的方式操作数据库,提高了代码的可读性和可维护性。本文将深入探讨μMongo,一个支持同步和异步...

    mongo-thingy:将MongoDB与Python结合使用的最惯用且友好的功能

    MongoDB ORM,即Object-Document Mapping,是将数据库中的文档结构映射到Python对象的一种机制。这允许开发者使用面向对象的方式来处理数据,无需关心底层的文档格式。`mongo-thingy`就是这样一种工具,它为Pymongo...

    让Java EE再次变酷使用JPA和EJB构建基于MongoDB的网络服务

    为了实现Java EE应用程序与MongoDB数据库的有效连接,可以利用Hibernate作为JPA提供者,通过Hibernate OGM (Object Grid Mapping) 服务器作为中间件,将Java EE应用程序连接到MongoDB数据库(见图1)。Hibernate OGM...

    MongoEngine中文入门教程(Python).pdf

    MongoEngine是一个针对Python的文档型数据库ORM(Object-Relational Mapping)库,它允许开发者以面向对象的方式操作MongoDB数据库。本教程通过构建一个简单的微博客应用,介绍MongoEngine的基本用法。 首先,安装...

    MongoDB权威指南.pdf

    2. **ODM (Object Document Mapping)**: 对象文档映射工具,如Mongoose(Node.js),将数据库操作与对象模型结合,简化开发。 3. **数据迁移**: 可以使用工具如`mongoimport`、`mongoexport`导入和导出数据,便于...

    MongoDB Definitive Guide 2nd 权威指南

    书中展示了如何在不同编程语言中集成MongoDB,以及ODM(Object Document Mapping)的概念。 这两版指南,尤其是第二版,全面覆盖了MongoDB从基础到高级的所有关键知识点,无论你是初学者还是经验丰富的开发者,都能...

    Python for Bioinformatics 第二版,最新版

    8.1 OBJECT PARADIGM AND PYTHON 139 8.2 EXPLORING THE JARGON 140 8.3 CREATING CLASSES 142 8.4 INHERITANCE 145 8.5 SPECIAL METHODS 149 8.5.1 Create a New Data Type Using a Built-in Data Type 154 8.6 ...

    PyPI 官网下载 | mongodol-0.0.3.tar.gz

    首先,我们来看“mongodol”这个名字,它可能是“MongoDB Object to Document ORM Library”的缩写,暗示这是一个面向对象到文档的ORM(Object-Relational Mapping)库,用于简化Python与MongoDB之间的交互。...

    Python Web框架Pylons中使用MongoDB的例子

    在Pylons中集成MongoDB,我们可以利用Ming ORM(Object-Relational Mapping),这是一个专门为MongoDB设计的Python ORM库。 首先,我们需要在`PROJECT/model/__init__.py`文件中定义MongoDB的初始化函数和映射对象...

    毕业设计_python+django实现京东商品详情数据的爬虫项目.rar

    Django自带ORM(Object-Relational Mapping)系统,可以方便地与数据库交互。 7. 反爬策略:京东和其他大型电商平台通常有反爬机制,如IP限制、User-Agent检测等。因此,需要了解如何设置代理IP,更换User-Agent,...

    Python-One-to-Million-中文版.pdf

    ORM(Object-Relational Mapping)如SQLAlchemy和Django ORM提供了面向对象的方式来操作数据库。还有轻量级的ORM库如Pony ORM和peewee。对于NoSQL数据库,如Redis、MongoDB和Neo4j,Python也有相应的驱动库。 **...

    Python3高级核心技术97讲-视频课程资源网盘链接提取码下载 .txt

    1. **SQLAlchemy**:ORM(Object-Relational Mapping)的概念及使用方法。 2. **MySQL/PostgreSQL**:连接数据库、执行SQL语句、事务处理、存储过程等。 3. **NoSQL数据库**:MongoDB 的基本操作,包括文档的增删改...

    PyPI 官网下载 | mongoengine_goodjson-1.0.2.tar.gz

    mongoengine是一个强大的ORM(Object-Relational Mapping)库,它为Python程序员提供了一种与MongoDB交互的方式,类似于SQL数据库中的ORM工具。通过mongoengine,开发者可以使用Python类来定义数据模型,这些类与...

    Python库 | aldjemy-0.3.51.tar.gz

    aldjemy库是一个基于SQLAlchemy的 ORM(Object-Relational Mapping)工具,它的主要目标是为Tornado框架提供与SQLAlchemy的无缝集成。SQLAlchemy是Python中广泛使用的数据库抽象层,它允许开发者使用面向对象的方式...

    tg2:在微框架核心上实现的具有全栈层的Python Web框架,支持MongoDB,可插拔应用程序和自动生成的Admin

    作为一个全栈框架,TG2包含了一系列关键组件,如模板引擎(如Mako或Jinja2)、ORM(Object-Relational Mapping)工具(如SQLAlchemy),以及用于处理HTTP请求和响应的中间件。这些组件协同工作,提供了构建Web应用所...

    18.计算机课程&毕业设计- BBS问答社区-python源代码+可执行程序+程序使用说明.zip

    Python的ORM(Object-Relational Mapping)库如SQLAlchemy或Peewee被用于与数据库进行交互。 2. **视图(Views)**:视图是处理用户请求并返回响应的部分。它们通常与URL路由结合,根据用户的请求调用相应的函数。 ...

    win系统下为Python3.5安装flask-mongoengine 库

    ORM(Object Relational Mapping)**:对象关系映射,是一种编程技术,用于将对象模型与关系型数据库之间的数据进行转换。 **5. MongoEngine**:一个用于操作MongoDB的ORM框架,提供了一个简洁而强大的API来处理...

    微信小程序python服务端

    ORM(Object-Relational Mapping)库如SQLAlchemy或Mongoose简化了数据库操作。 6. 安全性考虑 - 参数校验:服务端应对所有接收到的参数进行合法性校验,防止SQL注入等安全问题。 - 加密传输:使用HTTPS协议确保...

    mongo-blog:使用Flask,MongoEngine和MongoDB构建的简单博客应用程序

    MongoEngine是Python的一个ODM(Object-Document Mapping)库,它是MongoDB的驱动程序,用于简化对MongoDB数据库的操作。通过MongoEngine,开发者可以使用Python对象来代表数据库文档,使得数据操作更加直观和方便。...

    Python中包的用法及安装

    `SQLAlchemy`是Python的ORM(Object-Relational Mapping)框架,它允许开发者使用面向对象的方式来操作数据库。通过ORM,我们可以将数据库操作转换为Python对象的操作,简化了数据库编程。安装SQLAlchemy的命令是`...

Global site tag (gtag.js) - Google Analytics