【问题标题】:How can I inherit from psycopg2?我如何从 psycopg2 继承?
【发布时间】:2013-09-17 19:17:02
【问题描述】:

我正在尝试像这样继承 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 导入 MySQL 数据库

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

和派生类 类 MyDataBaseApp(MyDatabase): def add(self, myObjectClass): db = 我的数据库() 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()

但根据文档,我必须以另一种方式做,建议?

【问题讨论】:

  • 你想达到什么目的?

标签: python inheritance psycopg2


【解决方案1】:

免责声明:我不熟悉 psycopg

更新

似乎the documentation recommendspsycopg2.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

【讨论】:

  • 感谢您的回复。我做了你的建议,但仍然没有工作
  • 如果我们必须猜测错误,我们无法帮助您。请发布错误。发生了什么变化?你的确切代码是什么?
  • 与上述相同的错误。 import psycopg2 class myp(psycopg2.psycopg1): pass ii = myp() ii.connect(database = "myDataBase", user = "myUser", password="myPassword")
  • 我会尽力落实您的建议。非常感谢!
猜你喜欢
  • 2010-12-08
  • 2011-02-05
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 2018-03-10
相关资源
最近更新 更多