from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
url = (接続するURL情報)
engine = create_engine(url, echo=False)
Base = declarative_base(engine)
class TT_ACTOR(Base):
__tablename__ = "actor"
__table_args__ = {"autoload": True}
Session = sessionmaker(bind=engine)
session = Session()
q = session.query(TT_ACTOR)
for actor in q:
print "%s %s" % (actor.first_name, actor.last_name)
ただし上記の場合、クラス定義が読み込まれる際に対象のデータベースに接続するため、クラス定義前に接続先を決定しておく必要がある。クラス定義をまとめて外部ファイルからインポートしたい場合などは、import 文(もしくは from 文)以前に Base を構築する処理が必須となる。
クラス定義と接続先情報を疎結合とするため、以下の通り、動的にTable情報を読み込んだのちにクラス定義にマッピングする方法もある。
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, mapper
from sqlalchemy.ext.declarative import declarative_base
class TT_Actor(object):
pass
url = (接続するURL情報)
engine = create_engine(url, echo=False)
Base = declarative_base(engine)
tables = {name: sqlalchemy.Table(name, Base.metadata, autoload=True,
autoload_with=engine)
for name in engine.table_names()}
mapper(TT_Actor, tables["actor"])
Session = sessionmaker(bind=engine)
session = Session()
q = session.query(TT_Actor)
for actor in q:
print "%s %s" % (actor.first_name, actor.last_name)
0 件のコメント:
コメントを投稿