標籤:
之前看到了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.jsmodule.exports = { attributes: { name:‘STRING‘, color:‘STRING‘ }}
#myApp/api/models/user.jsmodule.exports = { attributes: { name:‘STRING‘, age:‘INTEGER‘, pony:{ model: ‘pet‘ } }}
one-many relation:
#myApp/api/models/pet.jsmodule.exports = { attributes: { name:‘STRING‘, color:‘STRING‘, owner:{ model:‘user‘ } }}#myApp/api/models/user.jsmodule.exports = { attributes: { name:‘STRING‘, age:‘INTEGER‘, pets:{ collection: ‘pet‘, via: ‘owner‘ } }}
還有 many-many relation:
#myApp/api/models/pet.jsmodule.exports = { attributes: { name:‘STRING‘, color:‘STRING‘, // Add a reference to User owners: { collection: ‘user‘, via: ‘pets‘, dominant:true } }}#myApp/api/models/user.jsmodule.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