Personal tools

TurboGearsが使ってるO/R MapperであるところのSQLObjectのInheritableSQLObjectは凄いよこりゃ

by ats posted at 2006-07-21 16:23 last modified 2006-07-21 23:51

たとえばTurboGearsのmodel.pyに以下のようなコードを書くとする。

 from sqlobject import *
 from sqlobject.inheritance import InheritableSQLObject
 from turbogears.database import PackageHub
 
 hub = PackageHub("atomic")
 __connection__ = hub
 
 class Atom(InheritableSQLObject):
     title = UnicodeCol()
 
 class AtomSub(Atom):
     about = UnicodeCol()

「tg-admin sql create」して「tg-admin shell」でシェルに入る。

 In [1]:hub.begin()
 Out[1]:<sqlobject.dbconnection.Transaction object at 0x1632d10>
 
 In [2]:Atom(title="atom")         # Atomなインスタンスを作る
 Out[2]:<Atom 1 title=u'atom'>
 
 In [3]:AtomSub(title="atomsub",about="about")  # AtomSubなインスタンスを作る
 Out[3]:<AtomSub 2 about=u'about' title=u'atomsub'>
 
 In [4]:hub.commit()              # コミット
 In [5]:for item in Atom.select(): # Atomなクラスをselect
    ...:     print type(item)
    ...:     
 <class 'atomic.model.Atom'>      # これは当然として...
 <class 'atomic.model.AtomSub'>   # <-- ココ,ココ!!

Atomをselectして帰ってきたクラスが,ちゃんとサブクラスになってる。atomなファーストクラス風のクラスを定義しておくと,リレーションとかも抽象化できる。まるでRDBMS使っている気がしないのがすげえな。

しかも,この機能はSQLObjectが頑張って実現しているので,SQLiteでもMySQLでもPostgreSQLでも利用可能。色んな妄想がふくらむなあ。もうZODB要らない感が漂う金曜の午後。

DjangoのO/R Mapperとか,ActiveRecordってこういうことできるのかな。。。

Category(s)
python
The URL to Trackback this entry is:
http://coreblog.org/ats/inheritable-sqlobject/tbping

Re:TurboGearsが使ってるO/R MapperであるところのSQLObjectのInheritableSQLObjectは凄いよこりゃ

Posted by everes at 2006-07-21 18:28
DjangoのModel継承についてのWiki。
http://code.djangoproject.com/wiki/ModelInheritance

Modelの継承は現在実装中のようです。
Wikiを見るとSQLObjectと同じような動作にはならなさそうなことが書いてあります。
どういう実装にするかきちんと追っていないので確かなことは言えませんが。

Re:TurboGearsが使ってるO/R MapperであるところのSQLObjectのInheritableSQLObjectは凄いよこりゃ

Posted by ats at 2006-07-21 18:38
>everesさん

ふむふむ,URLをご紹介頂きありがとうございました:-)
どうもリレーションを使った実装になるみたいですね
今年のPythonConferenceで聞いたこと炉によると,DjangoのO/R MapperはSQLObjectにとてもインスパイアされているとのことでしたが
継承に関してはSQLObjectとちょっと違ったアプローチを取るように見えますね...
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
(Required)
コメントスパム避けのための認証文字列です

Captcha Image

Pythonな求人
r = urlopen("http://www.webcore.co.jp/recruit")
About this blog
■Author
atsこと柴田淳です。この記事を読んでいただくと,技術者としての人となりを分かってもらえるかも。
Webcore株式会社 代表取締役
Plone上で動く,オープンソースのBlog Product - COREBlog2を使って運用しています。

最近書いた原稿
最終回 Python 3.0座談会(動画つき) 2009-07-16
Python 3.0 Hacks 第6回 Pythonicな文字列フォーマットforamat()メソッド 2009-03-30
言語としての一貫性を重視したPython 3の進化 2009-02-20
Python 3が後方互換性を捨てても求めたもの 2009-02-02
Python 3.0 Hacks : 第0回 Pythonの2008-2009 2009-01-01
 
最近書いた本,Mook
みんなのPython 改訂版
Python使いはもちろん,プログラミングの初心者から,他言語からの移行組までご好評いただいているPythonの定番入門書の第2版です。Python 3.0を含む最新の情報について加筆を行い,より読みやすいように構成を大幅に見直しました。第一版をお持ちの方にもお役立ていただける内容になっています。
みんなのPython Webアプリ編
Pythonの基礎から,Webアプリやフレームワークの仕組みまで,つまることなく一気に学べる書籍です。「みんなのPython」と一緒に読んでください:-)。
 

Powered by Plone, the Open Source Content Management System