LoginSignup
4
4

More than 5 years have passed since last update.

SQLAlchemyでセッションとリフレクションの利用

Posted at

すでに生成済みのテーブルに対して処理がしたくてSQLAlchemyでリフレクションしたテーブルをセッション管理しようとした時に変にはまったので、まとめ。
結論的にはautomap_base()を使えばいいだけ。

尚、sclalchemyを全然理解できていないので、指摘歓迎。

前提条件

  • mac(OS X El Capitan バージョン 10.11.5)
  • python 2.7.9
  • MAMP
  • mysqlでデータベース、テーブル生成済み

ソースコード例

session.py
# -*- coding: utf-8 -*-
import sys
import sqlalchemy
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker

def main(sys_argv):
    # MAMP + Mysql-Python環境でのエンジン生成方法
    engine = sqlalchemy.create_engine(
        "mysql://user_name:password@localhost/db_name"
        + "?unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock",
        echo=False)

    # セッション開始
    session = sessionmaker(bind=engine)()

    # mappedなinstanceをリフレクションを使った上で生成
    base = automap_base()
    base.prepare(engine, reflect=True)

    # 適当にやりたいことを
    # your_tableテーブルからdelete_flagが0なidを表示するなら
    your_table = base.classes.your_table
    result = session.query(your_table).filter(delete_flag == 0)
    for row in result:
        print row.id   

    # セッション終了
    session.close()

if __name__ == '__main__':
    main(sys.argv)

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4