从Python的dbapi中找到数据库类型(SQLite、MySQL、PostgreSQL)

0 投票
1 回答
1167 浏览
提问于 2025-04-16 15:17

我想知道我正在使用的数据库类型,这个信息是通过一个叫 dbapi 的游标实例得到的。不过在 dbapi 的文档里找不到任何线索。请问这能做到吗?

1 个回答

2

据我所知,这并不属于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'

撰写回答