SQLAlchemy で 動的にデータベースを作成する方法

SQLAlchemy を使用して MySQL に動的にテーブルを作成する方法はググったら沢山出てきたが、動的にデータベースを作成するのはあんまりなかった。

# -*- coding: utf-8 -*-
from sqlalchemy import create_engine

def create_database(uri, schema):
    engine = create_engine(uri, pool_recycle=3600, encoding='utf-8')
    engine.connect().execute(schema)

dbname = foo
schema = 'CREATE DATABASE IF NOT EXISTS `%s` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;' % dbname

user = 'dbusername'
password = 'dbpassword'
host = 'localhost'
uri = 'mysql://%s:%s@%s' % (user, password, host)
create_database(uri, schema)

一応これで、foo データベースは出来たけど、この方法であってるのかな…。


あと現在接続中のセッションから接続情報を取得するのは、以下のようにすればとれた。

scoped_session(sessionmaker(autoflush=True, autocommit=False, bind=engine))
session = Session()
configs = session.connection().engine.url.translate_connect_args()
dbi = session.connection().dialect.name

configs に接続ユーザ名やらパスワード、dbi には mysql という文字が返ってくる。