Найти тип базы данных (SQlite, Mysql, PostgreSQL) из dbapi в python - PullRequest
0 голосов
/ 07 апреля 2011

Мне нужно выяснить, с какой базой данных я работаю, основываясь на данных из экземпляра курсора dbapi. Не нашел никаких подсказок о том, как это сделать, в dbapi docs. Можно ли это сделать?

1 Ответ

2 голосов
/ 07 апреля 2011

Это не часть dbapi 2.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'
...