PythonにはSQLAlchemyというO/Rマッパーがあります。
最近SQLAlchemyのセッション周りをいじったのでまとめてみました。
よろしかったらご覧ください!
今回は、セッション作成編です。
最近SQLAlchemyのセッション周りをいじったのでまとめてみました。
よろしかったらご覧ください!
今回は、セッション作成編です。
環境
使用したテーブルは以下のとおりです。
環境は以下のとおりです。
テーブル準備
以下のプログラムをsettable.pyに保存してください。
pythonインタプリタで「from settable import *」を実行すると、O/Rマッピングして、テーブルを作成するところまで実行されます。
セッションの作成
データベースとのセッションを作成する主な種類は以下のものがあります。
2つ目は、scoped_session()で行います。
実際に見てもらうとわかりやすいと思います。
sessionmaker()の場合
scoped_session()の場合
sessionmaker()では、データベースに接続するごとに違うオブジェクトが返ってきますが、scoped_session()では、同じオブジェクトが返ってきます。
次回は、セッション削除編です。
一部、意味不明な部分があったので修正しました、すみません(汗
(2008.12.25)
使用したテーブルは以下のとおりです。
環境は以下のとおりです。
- CentOS 5.2
- Python 2.4.3
- SQLAlchemy 0.5.0rc2
- pysqlite 2.5.0
- sqlite 3.3.6-2
テーブル準備
以下のプログラムをsettable.pyに保存してください。
#! /usr/local/bin/python # -*- cording: utf-8 -*- import sqlalchemy import sqlalchemy.orm from datetime import datetime class User(object): def __init__(self,account,password,e_mail): self.account = account self.password = password self.e_mail = e_mail def __repr__(self): return "User<'%s','%s'>" % (self.account, self.e_mail) bind_name = 'sqlite:///:memory:' engine = sqlalchemy.create_engine(bind_name, encoding="utf8") metadata = sqlalchemy.MetaData(bind=engine) t_users = sqlalchemy.Table('users', metadata, sqlalchemy.Column('id', sqlalchemy.Integer, primary_key=True, autoincrement=True), sqlalchemy.Column('account', sqlalchemy.String(16), nullable=True), sqlalchemy.Column('password', sqlalchemy.String(32), nullable=True), sqlalchemy.Column('e_mail', sqlalchemy.String(128), nullable=True), sqlalchemy.Column('f_name', sqlalchemy.String(64)), sqlalchemy.Column('l_name', sqlalchemy.String(64)), sqlalchemy.Column('post', sqlalchemy.String(64)), sqlalchemy.Column('section', sqlalchemy.String(64)), sqlalchemy.Column('create_date', sqlalchemy.DateTime, nullable=True, default=sqlalchemy.func.now()), sqlalchemy.Column('last_modified', sqlalchemy.DateTime, nullable=True, default=sqlalchemy.func.now(), onupdate=sqlalchemy.func.current_timestamp()), ) sqlalchemy.orm.mapper(User,t_users) metadata.create_all()
pythonインタプリタで「from settable import *」を実行すると、O/Rマッピングして、テーブルを作成するところまで実行されます。
セッションの作成
データベースとのセッションを作成する主な種類は以下のものがあります。
- セッションを作成するごとに、違うセッションを返す
- 複数のセッションで、同じセッションを返す
2つ目は、scoped_session()で行います。
実際に見てもらうとわかりやすいと思います。
sessionmaker()の場合
>>> from settable import * >>> Session = sqlalchemy.orm.sessionmaker(bind=engine) >>> sess1 = Session() >>> sess2 = Session() >>> sess1 is sess2 False
scoped_session()の場合
>>> from settable import * >>> Session = sqlalchemy.orm.scoped_session(sqlalchemy.orm.sessionmaker(bind=engine)) >>> sess1 = Session() >>> sess2 = Session() >>> sess1 is sess2 True
sessionmaker()では、データベースに接続するごとに違うオブジェクトが返ってきますが、scoped_session()では、同じオブジェクトが返ってきます。
次回は、セッション削除編です。
一部、意味不明な部分があったので修正しました、すみません(汗
(2008.12.25)
Leave a comment