我有一个Connection(需要DB API 2.0兼容)的实例,但是我没有从它被导入的模块。问题是,我试图使用命名的参数,但我不知道哪个paramstyle使用。

由于paramstyle是一个模块级恒定,我不能只是要求Connection。我尝试使用 inspect.getmodule() Connection实例,但它只是返回None 。有没有办法,我只是缺少一个更简单的方法,或将我需要做一些try / except代码,以确定哪些paramstyle使用?

有帮助吗?

解决方案

type(connection)(连接类)inspect.getmodule(),未连接的对象。类跟踪它是在这样inspect可以找到它限定的模块,而对象创建未被跟踪。

其他提示

你从哪儿弄来从实例?我无法想象一个情况下,你不会知道事先连接的源。如果库的用户正在通过你的连接,请他为paramstyle为好。

总之,看看下面的控制台会话:

>>> import sqlite3
>>> c = sqlite3.connect('/tmp/test.db')
>>> c
<sqlite3.Connection object at 0xb7db2320>
>>> type(c)
<type 'sqlite3.Connection'>
>>> type(c).__module__
'sqlite3'
>>> import sys
>>> sys.modules[type(c).__module__].paramstyle
'qmark'

然而,吸。我不会依赖于它甚至没有一秒钟。我用我自己的连接状物体,我想这些信息传递给您的图书馆之一。当它试图奇迹般地找出paramstyle和失败,因为我使用的连接类包装对象,我讨厌它。

您不能。

您可以通过查看connection.__class__.__module__尝试,但它不是由DB-API,它会工作指明。事实上,对于许多普通情况下,它不会。 (例如,类是在充当DB-API模块对象的封装的子模块中定义;或类是C扩展,不__module__

不幸的是,但你将不得不通过周围与DB-API连接对象到DB-API模块对象的引用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top