SQLAlchemyにかぶせてActiveRecordとして扱えるらしいElixirを試してみた。チュートリアルを一通り。
面白かったのは継承っぽくかけるとこ。こんな感じでかける。
from elixir import *
metadata.bind = "sqlite:///test.db"
#metadata.bind.echo = True
class Artist(Entity):
using_options(inheritance='multi')
name = Field(Unicode(60))
def __repr__(self):
return '<Artist "%s">' % self.name
class Technoartist(Artist):
using_options(inheritance='multi')
def __repr__(self):
return '<TechnoArtist "%s">' % self.name
class Houseartist(Artist):
using_options(inheritance='multi')
def __repr__(self):
return '<HouseArtist "%s">' % self.name
class Dnbartist(Artist):
using_options(inheritance='multi')
def __repr__(self):
return '<Drum\'n\'BassArtist "%s">' % self.name
if __name__ == "__main__":
from model import *
setup_all()
create_all()
technasia = Technoartist(name=u"Technasia")
louievega = Houseartist(name=u"Louie Vega")
joeclaussell = Houseartist(name=u"Joe Claussell")
nutone = Dnbartist(name=u"Nu Tone")
omnitrio = Dnbartist(name=u"OmniTrio")
session.flush()
print "Artist.query.all()"
print Artist.query.all()
print "\nDnbartist.query.all()"
print Dnbartist.query.all()
Artistを探すと、サブクラスにあたるTechnoArtist,HouseArtist,Drum'n'BassArtistが探索される
Artist.query.all()
[<TechnoArtist "Technasia">, <HouseArtist "Louie Vega">,
<HouseArtist "Joe Claus sell">, <Drum'n'BassArtist "Nu Tone">,
<Drum'n'BassArtist "OmniTrio">]
Dnbartist.query.all()
[<Drum'n'BassArtist "Nu Tone">, <Drum'n'BassArtist "OmniTrio">]
チュートリアルによると、この先はSQLAlchemyのドキュメント読むのがいいんじゃねーかなと書いてあったので、読んでみる。
あと、このチュートリアルだけだとusing_optionsとかが分からないのでAPI Referenceも読むべしな感じ。