5

私のサーバーコードには、への呼び出しがあり_SO_fetchAlternateID(いくつかの呼び出しにネストされていvalueます)、最終的にはを呼び出しmakeConnectionますpgconnection.py

この呼び出しはで失敗しconn.autocommit(1)、エラーが発生します

TypeError:'bool'オブジェクトは呼び出せません

SQLObject(0.8.7)のコードは次のとおりです。

def makeConnection(self):
try:
    if self.use_dsn:
        conn = self.module.connect(self.dsn)
    else:
        conn = self.module.connect(**self.dsn_dict)
except self.module.OperationalError, e:
    raise self.module.OperationalError("%s; used connection string %r" % (e, self.dsn))
if self.autoCommit:
    # psycopg2 does not have an autocommit method.
    if hasattr(conn, 'autocommit'):
        conn.autocommit(1)
return conn

デバッグは、connが実際に接続オブジェクトを保持していることを示していますが、autocommitはメソッドではなく、ブール値(False)です。

self.moduleモジュール'psycopg2'(2.4.2)です。

これは構成の問題ですか?バージョンが一致していませんか?

アップデート:

原因は、psycopg2-2.4.2の非互換性の問題であることが判明しました。Cのソースコードを見ると、psycopg/connection.hには残念ながら。という名前の整数変数がありますautocommit。バージョン2-2.4は問題なく動作します。

4

2 に答える 2

5

バグを見つけました。このコードを見てください:

def _setAutoCommit(self, conn, auto):
    # psycopg2 does not have an autocommit method.
    if hasattr(conn, 'autocommit'):
        conn.autocommit(auto)

conn(type :)にはプロパティpsycopg2.connectionがない可能性があると想定していますが、autocommitプロパティがある場合は関数である必要があります。のコンテキストでは間違っています。psycopg2.connectionここpsycopg2.connection.autocommitで、はブール値です。

あなたが述べたのと同じ仮定が取り入れられてmakeConnectionおり、そこには他のいくつかの機能があります。

conn.autocommit(val)これは、のようにすべての呼び出しを変更することで修正できます。これconn.autocommit = valは、を使用しても簡単sedです。

于 2011-06-20T07:51:47.207 に答える
1

コードのどこかで誰かautocommit = Trueがconnオブジェクトに割り当てているように聞こえます。

通訳が:に到達したとき

 conn.autocommit(1) 

実際、それは以下を評価します:

 True(1) 

'autocommit'ブールキーがない場合は、self.dsnまたはself.dsn_dictの内容を確認してください。

于 2011-06-20T06:59:21.337 に答える