SQLAlchemyのセッションを学ぶ(セッション作成編)

| | Comments (0) | TrackBacks (0)
PythonにはSQLAlchemyというO/Rマッパーがあります。

最近SQLAlchemyのセッション周りをいじったのでまとめてみました。
よろしかったらご覧ください!

今回は、セッション作成編です。

環境
使用したテーブルは以下のとおりです。
User_Table.png

環境は以下のとおりです。
  • 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マッピングして、テーブルを作成するところまで実行されます。

セッションの作成
データベースとのセッションを作成する主な種類は以下のものがあります。
  • セッションを作成するごとに、違うセッションを返す
  • 複数のセッションで、同じセッションを返す
1つ目は、sessionmaker()で行います。
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)

0 TrackBacks

Listed below are links to blogs that reference this entry: SQLAlchemyのセッションを学ぶ(セッション作成編).

TrackBack URL for this entry: https://lab.hde.co.jp/blog/mt-tb.cgi/67

Leave a comment

About this Entry

This page contains a single entry by junichi shinohara published on November 18, 2008 10:23 AM.

Twistedでハマった件について(ProtocolクラスとFactoryクラス) was the previous entry in this blog.

日経225のSPF対応状況(2008年11月) is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.