python

SQLAlchemyのdeclarative_base関連

PythonのORMであるSQLALchemy。 とても便利なモジュールですが、巨大なモジュールで構造も複雑です。

そのSQLALchemyでモデルとデーターベースへのマッピングを同時に行うために利用する、declarative_baseの備忘録(なにぶん把握出来ておりませので間違い等あるかと思います)です。

まず、モデルの構築方法を。

from sqlalchemy import MetaData
from sqlalchemy.ext.declarative import declarative_base

modelClasses = {}
modelBase = declarative_base(class_registry = modelClasses, metadata=MetaData())

データーベースのテーブルにマッピングされるモデルを作成するには、"declarative_base"のインスタンスから派生する必要があります。

”10 Most Common Mistakes that Python Programmers Make”から

先日のFaceBookのPythonグループに投稿されたリンクから。

10 Most Common Mistakes that Python Programmers Make

上記の投稿を見ていて知らない部分もあったことから忘れないためのメモです。


#1 デフォルト値の扱いについて

関数の引数のデフォルト値が評価されるのは、関数が定義された時の一度だけで、 尚且つmutableだよというもの。


#2 クラス変数について

クラスオブジェクトそれぞれに名前と値の辞書が定義されています。

継承関係にあるクラスの場合、下位から上位に向かって名前を検索するため、 派生クラスで未定義の場合、上位クラスから検索し値を取得しますが、 派生クラスで同名で定義することで、派生クラスに新たなオブジェクトが定義され辞書に登録されます。

そのため上位クラスなどに影響を与えないよというもの。