2

(DB API 2.0準拠に必要)のインスタンスがありますが、Connectionインポート元のモジュールがありません。問題は、名前付きパラメーターを使用しようとしているのに、どちらを使用すればよいかわからないことparamstyleです。

はモジュールレベルの定数なのでparamstyle、質問することはできませんConnection。インスタンスで使用inspect.getmodule()してみましたが、返されました。私がちょうど行方不明になっているより簡単な方法はありますか、またはどちらを使用するかを決定するためにいくつかの/コードを実行する必要がありますか?ConnectionNonetryexceptparamstyle

4

3 に答える 3

2

インスタンスはどこから入手しましたか?接続元が事前にわからない状況は想像できません。ライブラリのユーザーが接続を渡している場合は、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'

しかし、それは最悪です。一瞬でも頼りにしない。私は自分の接続のようなオブジェクトを使用していますが、そのうちの1つをライブラリに渡したいと思います。接続のようなラッパーオブジェクトを使用しているため、paramstyleを魔法のように見つけようとして失敗した場合、私はそれを嫌います。

于 2009-09-24T12:22:11.223 に答える
2

接続オブジェクトではなく、にtype(connection)(接続クラス)を渡します。inspect.getmodule()クラスは、定義されたモジュールを追跡するためinspect、オブジェクトの作成は追跡されませんが、モジュールを見つけることができます。

于 2009-09-24T12:24:34.363 に答える
2

できません。

を見て試すことができconnection.__class__.__module__ますが、DB-APIによって機能するように指定されていません。実際、多くの一般的なケースではそうではありません。(たとえば、クラスはDB-APIモジュールオブジェクトとして機能するパッケージのサブモジュールで定義されています。または、クラスはC拡張であり、ありません__module__。)

残念ながら、DB-API接続オブジェクトとともにDB-APIモジュールオブジェクトへの参照を渡す必要があります。

于 2009-09-24T12:37:57.090 に答える