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使いたいひとはこーいう使い方もあるよって事で。