0

dbapiカーソルインスタンスからのデータに基づいて、どの種類のデータベースに対して作業しているかを調べる必要があります。dbapiドキュメントでこれを行う方法についての手がかりは見つかりませんでした。できますか?

4

1 に答える 1

2

少なくとも私の知る限り、これはdbapi2.0の一部ではありません。ただし、特定のデータベースオブジェクト(カーソル、接続)からモジュール名を取得し、それをアプリケーションが使用する既知の文字列にマップする関数を実装できます。

_DBNAME_MAP = {
    'psycopg2': 'postgres',
    'MySQLdb': 'mysql',
    'sqlite3': 'sqlite',
    'sqlite': 'sqlite'
    }

def get_dbname(dbobj):
    mod = dbobj.__class__.__module__.split('.', 1)[0]
    return _DBNAME_MAP.get(mod)

例:

>>> s_conn = sqlite3.connect('foo.db')
>>> get_dbname(s_conn)
'sqlite'
>>> get_dbname(s_conn.cursor())
'sqlite'

>>> p_conn = psycopg2.connect('host=localhost user=postgres')
>>> get_dbname(p_conn)
'postgres'
>>> get_dbname(p_conn.cursor())
'postgres'
于 2011-04-07T17:04:55.983 に答える