SQLAlchemyでMySQLに接続

SQLAlchemyからMySQLに接続してみたらちょっとハマった。
まず以下のエラーが出たので、mysql-pythonを入れてMySQLdbを使えるようにする。

ImportError: No module named MySQLdb

$ easy_install mysql-python

すると、エラーになってしまい、mysql-pythonを入れることができない。

ちょっと調べた結果、mysql-develが入ってないと上記のエラーになるということわかった。当方macを使用しているのでhomebrewでmysqlを入れてみる。

$ brew install mysql

この状態でeasy_installを再度実行し、mysql-pythonをダウンロードすることができた。


上記の問題を解決したら後は楽ちん。
こんな感じで、sqliteにつなぐのとほとんど変わらない感覚でmysqlに接続できた。

#!/usr/bin/env python
#-*- coding: utf-8 -*-

from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
import sys
import datetime

DATABASE = 'mysql://<ユーザ名>:<パスワード>@<ip>/<db名>'

metadata = MetaData()

#setup sqlalchemy
engine = create_engine(DATABASE, encoding='utf-8')
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()

#テーブルクラス
class Book(Base):
    __tablename__ = 'Book'
    isbn = Column('isbn', Integer, primary_key=True)
    title = Column('title', String(200))
    price = Column('price', Integer)
    publish = Column('publish', String(200))
    published = Column('published', String(200))
    
    def __init__(self, isbn, title, price, publish, published):
        self.isbn = isbn
        self.title = title
        self.price = price
        self.publish = publish
        self.published = published

    def __repr__(self):
        return 'Book'

cur = db_session.query(Book).all()

参考URL:
http://omake.accense.com/static/doc-ja/sqlalchemy/ormtutorial.html#python
http://everydayprog.blogspot.jp/2011/04/sqlalchemymysql.html
http://memememomo.hatenablog.com/entry/2012/04/14/144842