我如何从psycopg2继承?

时间:2013-09-13 07:24:50

标签: python inheritance psycopg2

我正在尝试像这样继承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 =无

        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()

但是根据文档,我必须采取另一种方式,建议吗?

1 个答案:

答案 0 :(得分:0)

免责声明:我不熟悉psycopg

<强>更新

似乎the documentation recommends是子类psycopg2.extensions.connection。然后,connect()是一个工厂函数,仍可用于创建新连接,但您必须再次将您的类作为工厂提供according to the docs

完整代码可能看起来更像(未经测试):

import psycopg2

class myp(psycopg2.extensions.connection):
    pass

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

更新2

使用更新的方法,您正在尝试使用不同/不同的接口构建新类。通常,组合比继承更好,请参阅wikipediathis question