之前看到了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/

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

  1. [Python之路] ORM(对象关系映射)

    一.概念 ORM是Python后端Web框架Django的核心思想,"Object Relational Mapping",即对象-关系映射,简称ORM. 一句话理解就是: 创建一 ...

  2. 对象-关系Metadata映射模式

    MetaData Mapping元数据映射 在MetaData中保存object-relation映射的详细信息. 以表格形式定义映射,并可由通用代码来处理映射. 运行机制 MetaData中的信息如 ...

  3. spring_配置处理器对象、处理器映射器、处理器适配器、视图解析器

    创建spring配置文件:application-context.xml. 创建处理器类 package com.lanou.demo.controller;public class BookCont ...

  4. Hibernate单向多对一对象关系模型映射

    单向的many-to-one 案例: 班级和学生 父亲和子女 单向:只能由其中一方维护关系 Many-to-one中有many的一方法维护或者体现两者之间的关系. 单向的many-to-one描述学生 ...

  5. Hibernate双向一对一对象关系模型映射

    一个员工一辆车:one-to-one 实现一:让汽车表中的外键唯一 create table emp ( eid int primary key auto_increment, ename varch ...

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

    1.注册 /// <summary>    /// AutoMapper 注册    /// </summary>    public class AutoMapperConf ...

  7. Java 自定义注解实现ORM对象关系映射

    一,ORM概念 ORM即Object Relation Mapping,Object就是对象,Relation就是关系数据库,Mapping映射,就是说Java中的对象和关系数据库中的表存在一种对应关 ...

  8. Python学习---django之ORM语法[对象关系映射]180124

    ORM语法[对象关系映射] ORM: 用面向对象的方式去操作数据库的创建表以及增删改查等操作. 优点:1 ORM使得我们的通用数据库交互变得简单易行,而且完全不用考虑该死的SQL语句.快速开发. 2 ...

  9. Hibernate基础学习(五)—对象-关系映射(下)

    一.单向n-1 单向n-1关联只需从n的一端可以访问1的一端. 域模型: 从Order到Customer的多对一单向关联.Order类中定义一个Customer属性,而在Customer类不用存放Or ...

随机推荐

  1. vtiger自定上传图片的字段

    废话不多说,上一篇有说到过vtiger新建模块的事 现在我新建了一个Score的模块,里面需要一个上传图片的功能 在Score界面新建一个字段叫grede 但是自定义类型里面是没有,图片这个选项的,只 ...

  2. P2502 [HAOI2006]旅行 并查集

    题目描述 Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N个景点(编号为1,2,3,…,N),这些景点被M条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也 ...

  3. Java中的Lambda表达式

    Lambda来源于希腊字母入,发音为  /'læmdə/对高数有所了解的人都知道λ用于声明一个数学逻辑系统,表示根据XX的输入参数,会返回某个Y结果.这正是编程语言中函数(方法)的意思.因此Lambd ...

  4. 陈国凯oi历程

    从此成了OI退役狗 说实话,当时NOIP比赛前就想写这篇,结果一直没有足够的动力和时间写,现在高考完了,也有了时间,就写一点东西,记录一下我的OI经历吧. 初入OI 高一时,我是信息技术课代表(当然没 ...

  5. mongoDB的配置以及运行

    干嘛的:数据库,nosql(非关系型)   场景:解决大规模数据集合多重数据种类 一.mongoDb安装: 下载地址: https://www.mongodb.com/download-center ...

  6. 潭州课堂25班:Ph201805201 爬虫基础 第六课 选择器 (课堂笔记)

    HTML解析库BeautifulSoup4 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库,它的使用方式相对于正则来说更加的简单方便,常常能够节省我们大量的时间 ...

  7. Codechef October Challenge 2018 游记

    Codechef October Challenge 2018 游记 CHSERVE - Chef and Serves 题目大意: 乒乓球比赛中,双方每累计得两分就会交换一次发球权. 不过,大厨和小 ...

  8. linux ulimit具体修改服务器配置

    ulimit -a 显示当前用户的各种限制.   ulimit -n 的数值表示每个进程可以打开的文件数目.   一般情况下, ulimit -n 的数值是1024.   当进程打开的文件数目超过此限 ...

  9. epoll惊群原因分析

    考虑如下情况(实际一般不会做,这里只是举个例子): 在主线程中创建一个socket.绑定到本地端口并监听 在主线程中创建一个epoll实例(epoll_create(2)) 将监听socket添加到e ...

  10. .net 企业管理系统快速搭建框架

          简言   本人在博客园注册也2年多了,一直没有写自己的博客,因为才疏学浅一直跟着园子里的大哥们学习这.net技术.一年之前跳槽到现在的公司工作,由于公司没有自己一套的开发框架,每次都要重新 ...