我正在尝试像这样继承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()
但是根据文档,我必须采取另一种方式,建议吗?
答案 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
使用更新的方法,您正在尝试使用不同/不同的接口构建新类。通常,组合比继承更好,请参阅wikipedia和this question。