sqlalchemy

テーブルをjoinした結果をモデルにmappingできる。

__table__にsqlalchemy.orm.joinした結果を代入すると、複数のテーブルをjoinした結果をmappingしたモデルが作れる。 (idのconflictを避けるためにorm.column_propertyを使うことが多い) import sqlahelper import sqlalchemy as sa import sqlalchemy.orm a…

onupdateやeventなど

更新時刻を設定したい場合などデフォルトで提供されている、onupdateオプションを使う。 import sqlahelper import sqlalchemy as sa import sqlalchemy.orm as orm from datetime import datetime Base = sqlahelper.get_base() DBSession = sqlahelper.get…

sqlalchemyでうれしいところ。(concrete table inheritanceで継承元のクラスで検索した場合に適切な子クラスにマッピングしたオブジェクトを返してくれるところ)

sqlalchemy は、concrete table inheritanceで定義したモデルがあるとする。 それらのモデルを継承元のクラスで検索した場合に、検索結果のqueryは適切な子クラスにマッピングしたオブジェクトのリストとなって返ってくるところ。これがうれしい。 e.g. 例は…

declarative_baseのBaseクラスを拡張してみる。

よくmixinで拡張したりなんかする。 e.g. django likeなmodel定義にするmixin import sqlalchemy as sa import sqlalchemy.orm as orm from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declarative_base Base…

one to many tree, many to many

one to many tree many to many あとでなおす

n+1問題?

http://dev.ariel-networks.com/articles/workshop/rails-activerecord/ 1:Nの関係のtableが持つオブジェクトを列挙しようとしたとき、ナイーブに書くと1+N回のsqlが実行されてしまうと言う問題らしい。 eager loadingなどで解決するらしい。 model.search_q…

query_propertyとhybrid_property(hybrid_method)が便利。

機能について query_property query_propertyは、モデル*1クラスが検索クエリをあたかもpropertyであるかのように持たせることができる機能。以下が利用例。query_propertyを利用しない場合の検索は以下のようになる。 # e.g. User.first_nameで絞り込み検索…

sqlalchemyの練習

メモ。 declarativeの使い方 tableの作成 sessionの使い方 検索の仕方 insertの方法