Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

sqlalchemyでデータを操作する

いろんなデータベースを触る際、それぞれでツールの使い方を覚えるのがめんどいので書いた。
(昔、django版も書いたけど)

sqltools.py

from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import mapper
from sqlalchemy.orm import sessionmaker
from types import ClassType
import re

def camelize(str):
    p = re.compile(r'_([a-z])')
    return p.sub((lambda match:match.groups(0)[0].upper()), str.capitalize())    

def initialize(url, *args, **kwargs):
    engine = create_engine(url, *args, **kwargs)

    meta = MetaData()
    meta.reflect(bind=engine)
    tables = meta.tables

    for name in tables:
        tbl_name = tables[name].name
        cls_name = str(camelize(tbl_name))
        cls = ClassType(cls_name, (object,), {})
        mapper(cls, tables[name])
        globals()[cls_name] = cls

    Session = sessionmaker(bind=engine)
    global session
    session = Session()

initialize('xxxxxxxx')

mappingしてるクラス名はcamelizeで書き直してます。
mapperまで作ってあるのでデータを作るのは割と簡単です。
ふつーにデータをいじる分にはormの方の機能でまかなえるでしょう。

使う際、インタラクティブシェルを使いたい人は

python -i sqltools.py

でモジュール実行後の状態でインタラクティブシェルモードになります。
ちょろいデータ操作ぐらいならばこっちの方が楽かも知れませんね。

仕事でpython使いたいひとはこーいう使い方もあるよって事で。