我需要根据来自 dbapi 游标实例的数据找出我正在使用的数据库类型。在 dbapi 文档中没有找到有关如何执行此操作的任何线索。可以做到吗?
问问题
881 次
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'
于 2011-04-07T17:04:55.983 回答