在python中从dbapi中查找数据库类型(SQlite、Mysql、PostgreSQL)

在python中从dbapi中查找数据库类型(SQlite、Mysql、PostgreSQL),python,database,python-db-api,Python,Database,Python Db Api,我需要根据来自dbapi游标实例的数据,找出我使用的是哪种数据库。在dbapi文档中没有找到有关如何执行此操作的任何线索。可以这样做吗?至少据我所知,它不是dbapi 2.0的一部分。但是,您可以实现一个函数,从给定的数据库对象(游标、连接)获取模块名称,并将其映射到一个已知字符串,以便应用程序使用: _DBNAME_MAP = { 'psycopg2': 'postgres', 'MySQLdb': 'mysql', 'sqlite3': 'sqlite', '

我需要根据来自dbapi游标实例的数据,找出我使用的是哪种数据库。在dbapi文档中没有找到有关如何执行此操作的任何线索。可以这样做吗?

至少据我所知,它不是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'