「顧客の要望」で「CGI環境」と言われちゃう事がままあり
そういうケースでは、djangoごと引っ張ってくるのは無理っぽい。
と思ってる人は多いはず。
筆者が試したのはelixirです。
http://elixir.ematia.de/trac/wiki
当時は0.6.0ぐらいだったと思います。
結論から言うと、悪くはないのですが、
sqlalchemyのwrapper的な生い立ちのせいか
微妙なところで変なアクが有りますね。
- ModelというかEntityは、概ねdb.Modelの様な調子で書けます。
- Field()への入れ子(?)宣言なのが何とも言えない。
- 外部キー制約は、OneToMany(), OneToOne()で行けます。
- 内部で、ReferenceProperty的挙動もやってくれます。
- 定義したとおりのプロパティ名で、キーのリンク先データを引っ張ってくれます。
- SQLに逐一送っちゃわずに、内部でトランザクションエミュレーションしてる模様。
- setup_all()をやらないと、commit()でもデータを書き出してくれなかったとか。
- 故に、データの書き出しは、Entityのsave()じゃなくて、session.commit()だったりとか。
- # Entity.put = staticmethod(session.commit) #とかやっておくべきか?
- setup_all()で、Entity.queryが沸いて出るとか。
- Entityのquery.filer_by()関数で、新しいオブジェクトを返すので、それを変数に入れ忘れると、全件検索になっちゃうとか。
- 複数カラムにまたがるインデックスを貼りたい場合は、sqlalchemyのクラスを引っ張ってくる必要が有っちゃったりとか。
その一方、実装は、pythonの限界に挑戦しちゃってる感があるので、参考になります。