ORM
- SQLAlchemyでORMを使うためにはbaseクラスを使う方法と、Tableクラスとmapperメソッドを使う方法がある。
- Tableクラスとmapperメソッドを使う方法は古いやりかたらしい。一応やりかたは以下の通り
from sqlalchemy import Column, Integer, String, Table from sqlalchemy.schema import MetaData from sqlalchemy import create_engine engine = create_engine('sqlite:///:memory:', echo=True) # 接続先DBの設定 metadata = MetaData() my_table = Table("my_table", metadata, Column('id', Integer, primary_key=True), Column('type', String(50)), Column("some_alt", Integer) ) class MyClass(object): pass mapper(MyClass, my_table, properties={ 'type':my_table.c.type, 'alt':my_table.c.some_alt }) metadata.create_all() # Table作成
- Tableクラスとmapperメソッドを使ったORMをbaseクラスを使った方法に置き換えると以下のようになる。
baseクラスを継承したクラスを作成すると、Metadataをメンバに持つクラスを作る事ができる。
from sqlalchemy import Column, Integer, String, Table from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base engine = create_engine('sqlite:///:memory:', echo=True) # 接続先DBの設定 Base = declarative_base(bind=engine) class MyClass(Base): __tablename__ = 'my_table' id = Column(Integer, primary_key=True) type = Column(String(50)) alt = Column("some_alt", Integer) Base.metadata.create_all(engine) # Table作成
- またDBへの挿入、更新、参照などをする場合はDB接続のためのSessionオブジェクトとORMを使ってDBの操作を行う。
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base engine = create_engine('sqlite:///:memory:', echo=True) Base = declarative_base(bind=engine) Session = sessionmaker(bind=engine) session = Session() class MyClass(Base): __tablename__ = 'my_table' id = Column(Integer, primary_key=True) type = Column(String(50)) alt = Column("some_alt", Integer) Base.metadata.create_all(engine) myclass = MyClass() myclass.id = 0 myclass.type = "myclass" myclass.alt = 10 session.add(myclass) # insertやupdateをするためのデータを持ったORMオブジェクトをセッションに追加 session.commit() # セッション中に存在するORMオブジェクトを使ってinsertもしくはupdateする