Python+SQLAlchemy+MySQLでORマッピング

Python+SQLAlchemy+MySQLでDB接続」ではSQLを直接記述して実行したが、今回はSQLを記述せずにDBアクセスを行う。

つまり、SQLAlchemyのORマッピング機能を使用して、SQLを書かずにSQLを実行する。

要点だけを記載したコードは次。

import sqlalchemy as dbMapper
・・・・・・・

url = 'mysql://ユーザ名:パスワード@IPアドレス/DB名'
engine = dbMapper.create_engine(url, echo=True)

# MetaData の生成
meta = MetaData()

# MetaDataをエンジンに結びつける
meta.bind = engine

# SQLAlchemyのTableを使用して、データベースのテーブル定義からテーブルオブジェクトを作成する
table_object = Table('テーブル名', meta, autoload=True)

# selectの実行
rows = table_object.select().execute()

# select実行結果の確認
for row in rows:
    print(row)

実行すると。文字化けwww。

(01, '????', '??')
(02, '????', '??')

DB側の文字コードがutf8なので、urlを記述する部分に次のように「?charset=utf8」を追記して文字コードを指定する。

url = 'mysql://ユーザ名:パスワード@IPアドレス/DB名?charset=utf8'

実行すると文字化けが修正された。

(01, 'ああああ', '愛知')
(02, 'いいいい', '東京')

下記2つのサイトを参考。
本家のマニュアル
SQLAlchemy 0.6.5 ドキュメント (和訳)