实例化MySQL DB类

时间:2012-01-01 15:33:50

标签: python mysql

我想编写一个包含所有MySQL操作的类。

现在,我甚至无法将类实例化。

Traceback (most recent call last):
  File "./compare.py", line 71, in <module>
    main()
  File "./compare.py", line 67, in main
    db = Table.mysqlconnect()
TypeError: unbound method mysqlconnect() must be called with Table instance as first argument (got nothing instead)

代码:

import MySQLdb

class Table(object):
    """ Using Databases """
    def __init__(self, db, name ):
        self.db = db
        self.name = name
        self.cur = self.db.cursor()

    def mysqlconnect():
        conn = MySQLdb.connect (host = "mysql.blah.com",
            user = "user",
            passwd = "password",
            db = "database")
        cursor = conn.cursor ()
        cursor.execute ("SELECT VERSION()")
        row = cursor.fetchone ()
        print "server version:", row[0]
        cursor.close ()
        conn.close ()



def main():

    db = Table.mysqlconnect()
    pass

if __name__ == '__main__':
    main()

3 个答案:

答案 0 :(得分:3)

错误完全正确:

TypeError: unbound method mysqlconnect() must be called with Table instance as first argument (got nothing instead)

换句话说,您使用的是班级名称Table),而不是班级Table的{​​{3}}。

阅读instance,他们完全按照您的意愿行事。如果你想阅读类和对象,那么these examples非常好。

答案 1 :(得分:3)

你应该阅读这些文档,但你要找的是:

db = Table()
db.mysqlconnect()

简短说明:mysqlconnectTable类的实例方法。

很长的解释:Table现在是一个抽象的概念 - 你已经告诉Python解释器它应该做什么,但你还没有真正做过。对于你的班级来说,这就像蓝图一样。在使用它之前,或使用任何定义为它的一部分的方法*你需要先实际“构建它”。

这就是你做的事情:db = Table()这告诉Python解释器我现在有一个名为db的变量,我希望它是Table()的一个实例。现在您已经拥有了实例,可以调用实例方法(因为实例方法仅适用于实例)并获得结果。

*有一些叫做类方法的东西你可以在不首先实例化类的情况下使用,但是当你阅读文档时你会看到它。

答案 2 :(得分:0)

另外,mysqlconnect需要使用self来访问类属性。例如:

import MySQLdb
class Table:
    def __init__(self, host, user, passwd, name)
        self.db = MySQLdb.connect (host = host,
            user = user,
            passwd = passwd,
            db = name)
        self.cursor = self.db.cursor()
    def mysqlconnect(self):
        self.cursor.execute ("SELECT VERSION()")
        row = cursor.fetchone()
        print "server version:", row[0]
        self.cursor.close ()
        self.db.close ()

# Main must be outside the table class
def main():
    tableInstance = Table("mysql.blah.com", "user", "password", "database")
    tableInstance.mysqlconnect()

if __name__ == '__main__':
    main()