25022013 Python SQLAlchemy
先週は、レガシーなOracleデータベースと格闘していた(文字エンコーディングの件もその一つ)。
__table__と__tablename__の違い
__table__は適切に設定済みのテーブルに対して使うらしい。自分でごちゃごちゃと設定したい場合は__tablename__と__table_args__を使うべし
複合プライマリーキーでのone-to-many
主キーが複合プライマリーキーの場合はそれぞれにprimary_key=Trueをつけるが、外部キーで一対多の関連付けをしたい場合には __table_args__で外部キー設定をしておく。
class Protocol(Base): __tablename__ = 'tblprotocol' id = Column("id", String(32), primary_key=True) version = Column("version", String(11), primary_key=True) name = Column("name", String(255)) class Experiment(Base): __tablename__ = 'tblexperiments' __table_args__ = (ForeignKeyConstraint(['protocolid','protocolversion'], ['tblprotocol.id', 'tblprotocol.version']), {}) id = Column("id", String(32), primary_key=True) protocolid = Column("protocolid", String(32)) protocolversion = Column("protocolversion", String(11)) name = Column("name", String(255)) protocol = relationship("Protocol", backref="experiments")
そもそも主キーの無いテーブル
主キーの無いテーブルはエラーが出るので、適当に複合キーを設定してプライマリーキーにしてしまう。
- SQLAlchemy declarative: table without any primary keys?
- I have a schema where my table doesnt have a primary key, can SA's ORM handle it?
その他
SQLもORマッパーもわかっていればバランスの取れた設計になっていいのではなかろうかと思った。ORマッパー側から考えたほうがER図が綺麗になりそうだし。
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
誰にも聞けなかった新聞によくでる経済データのよみかた (dare nimo kikenakatta)
超変換!! もじバケる6 20個入 BOX (食玩)
セクシーコマンドー外伝 すごいよ!!マサルさん 1 (ジャンプコミックスDIGITAL)
セクシーコマンドー外伝 すごいよ!!マサルさん 2 (ジャンプコミックスDIGITAL)
セクシーコマンドー外伝 すごいよ!!マサルさん 3 (ジャンプコミックスDIGITAL)
セクシーコマンドー外伝 すごいよ!!マサルさん 4 (ジャンプコミックスDIGITAL)
セクシーコマンドー外伝 すごいよ!!マサルさん 5 (ジャンプコミックスDIGITAL)
セクシーコマンドー外伝 すごいよ!!マサルさん 6 (ジャンプコミックスDIGITAL)
セクシーコマンドー外伝 すごいよ!!マサルさん 7 (ジャンプコミックスDIGITAL)
sakanaction (初回生産限定盤CD+DVD)
吟醸酒の来た道 (中公文庫)
生物と無生物のあいだ (講談社現代新書)