python下申明式的对象关系DB映射器--Pony

之前看到了Sails.js的waterline提供了声明式的关系型对象与DB的映射器,惊为天人,可以说是极大地提升了效率。

利用waterline的对象关系模型,用户可以直接使用javascript语言定义关系型的数据库,也就是说,我们不再需要像在java环境中那样声明一个个model,然后具体的关系操作还需要用户在业务逻辑中代码处理,而是提供了关系型的申明方式来创建model,支持one way relation, one-one relation, one-many relation, many-many relation。其语法如下:

one way relation:

#myApp/api/models/pet.js
module.exports = {

    attributes: {
        name:‘STRING‘,
        color:‘STRING‘
    }

}
#myApp/api/models/user.js
module.exports = {

    attributes: {
        name:‘STRING‘,
        age:‘INTEGER‘,
        pony:{
            model: ‘pet‘
        }
    }

}

one-many relation:

#myApp/api/models/pet.js
module.exports = {

    attributes: {
        name:‘STRING‘,
        color:‘STRING‘,
        owner:{
            model:‘user‘
        }
    }

}

#myApp/api/models/user.js
module.exports = {

    attributes: {
        name:‘STRING‘,
        age:‘INTEGER‘,
        pets:{
            collection: ‘pet‘,
            via: ‘owner‘
        }
    }

}

还有 many-many relation:

#myApp/api/models/pet.js
module.exports = {

    attributes: {
        name:‘STRING‘,
        color:‘STRING‘,

        // Add a reference to User
        owners: {
            collection: ‘user‘,
            via: ‘pets‘,
            dominant:true
        }
    }
}
#myApp/api/models/user.js
module.exports = {

    attributes: {
        name:‘STRING‘,
        age:‘INTEGER‘,

        // Add a reference to Pet
        pets:{
            collection: ‘pet‘,
            via: ‘owners‘
        }
    }

}

可以看到,所有的数据库关系都通过了对象model定义好了,同时还支持流水线式(waterline)的操作方式:

User.find().populate(‘pets‘).exec(function(err,r){console.log(r[0].toJSON())});
//以下为返回的json
{ pets:
   [ { name: ‘Pinkie Pie‘,
       color: ‘pink‘,
       id: 2,
       createdAt: Tue Feb 11 2014 17:58:04 GMT-0600 (CST),
       updatedAt: Tue Feb 11 2014 17:58:04 GMT-0600 (CST),
       owner: 1 },
     { name: ‘Applejack‘,
       color: ‘orange‘,
       id: 4,
       createdAt: Tue Feb 11 2014 18:02:58 GMT-0600 (CST),
       updatedAt: Tue Feb 11 2014 18:02:58 GMT-0600 (CST),
       owner: 1 } ],
  name: ‘Mike‘,
  age: 21,
  createdAt: Tue Feb 11 2014 17:49:04 GMT-0600 (CST),
  updatedAt: Tue Feb 11 2014 17:49:04 GMT-0600 (CST),
  id: 1 }

眼见着javascript生态环境一片欣欣向荣,不得不感叹我大python却无如此激情洋溢的框架,不禁扼腕。于是打算自己开创一个,却由于水平和时间所限,至今任然没开始动工,只是开了个repo在github。

今天偶然发现了一个python的package,名叫Pony,其功能与waterline相当,而且整个生态环境更加友好,还提供了UI工具供开发者使用。

参考:

1. Pony ORM官网:http://ponyorm.com/

2. Pony Demo:  http://www.blog.pythonlibrary.org/2014/07/21/python-101-an-intro-to-pony-orm/

3. Pony github: https://github.com/ponyorm/pony

4. Pony Docs: http://doc.ponyorm.com/

5. Pony Editor: https://editor.ponyorm.com/

时间: 2024-11-13 20:36:59

python下申明式的对象关系DB映射器--Pony的相关文章

.net AutoMapper(对象与对象之间的映射器) 的简单使用

1.注册 /// <summary>    /// AutoMapper 注册    /// </summary>    public class AutoMapperConfig    {        /// <summary>        ///         /// </summary>        public static void Config()        {            Mapper.Initialize(m =>

持久化和对象关系映射

持久化:持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘文件.XML文件等).持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中.XML数据文件中等等. 持久层:主要实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联. 对象数据映射(ORM):Object/Relational Mapper,即“对象-关系型数据映射组件”.对于O/R,即 Object(对象)和 Relational(关系

Hibernate对象关系映射(一)

Hibernate的本质是对象关系映射,ORM实现了将对象的变化保存到数据库中.以前我们对关系表操作,执行增CRUD.现在我们不在对关系表进行操作,而是直接对对象操作.对象关系的映射有以下几种 基本图形 图1 一对一映射 分两种情况 主键 唯一外键 1主键 两个对象具有相同的主键,不再有额外字段维护他们的关系 图2 Person和Card之间,他们的主键是相同的 2唯一外键 其实是用来表示多对一的,如果加上唯一限制,就可以表示一对一关联 图3 图3可以看到卡号在person中充当了一个外键. 根

Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的,不是我们三言两语就能解决的,我一直想抽个时间自己再过一遍Sqlite和JDBC的,但是,大家也知道,琐事比较多,我们来说一下数据库的框架吧,事实上市面上,我觉得还可以的数据库框架有两个,ORMLite和GreenDao,我以前做的运动类的应用上,就需要存储大量的运动数据,我们最开始是在本地写数据库的

第54篇ORM对象关系映射 如何使用ORM与数据可建立连接

1. ORM(对象关系映射) 很多语言的很多web框架中都有这个概念 2. 为什么要有ORM? 1. 写程序离不开数据. 2. 在Python程序中要用到数据库中的数据,怎么办? 1. 使用pymysql连接MySQL数据库的步骤 1. import pymysql 2. 建立连接 conn = pymysql.connect( host='127.0.0.1', port=3306, database='day43', user='root', password='123', charset=

2、基于Python下的web框架之中最具有代表性的一个——Django

是,许多成功的网站和app都基于Django(Uber.Instagram),开放源代码,遵从BSD版权,采用MVC的软件设计模式,及模型M,视图V和控制器C. (BSD:伯克利软件发行版,开源许可协议,保护原始作者的身份,至少得到身份认可,还可以防止其它人将产品据为己有) 如何使用django orm批量创建数据? def bulk_create(self, objs, batch_size=None):     # 批量插入     # batch_size表示一次插入的个数     obj

Hibernate(开放源代码的对象关系映射框架)

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久

python下的MySQLdb使用

python下的MySQLdb使用 3.执行sql语句和接收返回值 cursor=conn.cursor() n=cursor.execute(sql,param) 首先,我们用使用连接对象获得一个cursor对象,接下来,我们会使用cursor提供的方法来进行工作.这些方法包括两大类:1.执行命令,2.接收返回值 cursor用来执行命令的方法: callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数 execut

Flask-SQLAlchemy 配置,处理对象-关系,一对多,多对多

ORM(Object Relational Mapper) 对象关系映射.指将面对对象得方法映射到数据库中的关系对象中. Flask-SQLAlchemy是一个Flask扩展,能够支持多种数据库后台,我们可以不需要关心SQL的处理细节,操作数据库,一个基本关系对应一个类,而一个实体对应类的实例对象,通过调用方法操作数据库.Flask-SQLAlchemy有很完善的文档. Flask-SQLAlchemy是通过URL指定数据库的连接信息的. 初始化的两种方法如下(以连接Mysql数据库为例): f