0

私はこのようにpsycopg2を継承しようとしています:

import psycopg2

class myp(psycopg):
    pass

ii = myp
ii.connect(database = "myDataBase", user = "myUser", password="myPassword")

次に、エラーがスローされます。

class myp(psycopg2._psycopg):
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)

psycopg2 ライブラリから継承することは可能ですか?

編集:別のデータベースを使用したいので、クラス MyDatabase を変更するだけです。包み紙のようなもの。例:

import psycopg2

class MyDatabase(psycopg2):
    def connect(self):
        #do some stuff
        return psycopg2.connect(database = "myDataBase", user = "myUser",   password="myPassword")

mysqldb インポート MySQLdb の場合

class MyDatabase(MySQLdb)
    def connect(self):
        #do some stuff
        return psycopg2.connect(database = "myDataBase", user = "myUser", password="myPassword")

派生クラス class MyDataBaseApp(MyDatabase): def add(self, myObjectClass): db = MyDatabase() cn = None

        try:
            cn = db.connect()
            cur = cn.cursor()
            cur.execute ("INSERT ...",(myObjectClass.parameter1, myObjectClass.parameter2))
            cn.commit()
        except MyDatabase.DatabaseError, e:
            print e
            if cn:
                cn.rollback()
        finally:
            if cn:
                cn.close()

しかし、ドキュメントによると、別の方法で行う必要があります。提案はありますか?

4

1 に答える 1

0

免責事項: 私はpsycopgに精通していません

アップデート

ドキュメントではサブクラス化を推奨psycopg2.extensions.connectionしているようです。次に、connect()新しい接続を作成するために引き続き使用できるファクトリ関数ですが、ドキュメントによると、クラスをファクトリとして提供する必要があります

完全なコードは、(テストされていない) 次のようになる必要があります。

import psycopg2

class myp(psycopg2.extensions.connection):
    pass

ii = connect(connection_factory=myp,
             database = "myDataBase", user = "myUser", password="myPassword")

更新 2

更新されたアプローチでは、異なる/分岐したインターフェイスを持つ新しいクラスを構築しようとしています。多くの場合、構成は継承よりも優れています。ウィキペディアこの質問を参照してください。

于 2013-09-13T07:53:34.320 に答える