使用类对象

时间:2017-05-27 23:33:32

标签: python python-3.x sqlite

我正在尝试使用此python类从外部sqlite文件创建数据库,但我收到此错误消息:

  

query()需要2个位置参数,但有3个被赋予

我想我理解这个问题,但我不知道如何绕过它,有人能指出我正确的方向吗?

class DatabaseManager:
    def __init__(self, db):
        self.conn = sqlite3.connect(db)
        self.conn.commit()
        self.cur = self.conn.cursor()

    def query(self, arg):
        self.test_setup = open(arg)
        self.executescript(test_setup.read())  
        self.cur.execute(arg)
        self.con.commit()
        return self.cur

    def __del__(self):
        self.conn.close()

dbmgr = DatabaseManager("testdb.db")
dbmgr.query('test_setup.sql', 'r')

2 个答案:

答案 0 :(得分:1)

您的query只接受一个参数arg,但您传递的是self(隐式)和'test_setup.sql'以及'r'。鉴于您不使用'r',您应该只调用:

dbmgr = DatabaseManager("testdb.db")
dbmgr.query('test_setup.sql')

答案 1 :(得分:0)

如果您查看您的课程的查询声明,您会看到有两个参数:self和arg

但是,当您调用查询函数时,会传递三个参数:您不需要提及的隐式self,db和参数。

如果你想让arg成为一个多参数,你需要像这样重写它:* arg。否则,您可以修改三个参数的查询声明。

请记住* arg是可迭代的,您可能需要在将其传递给其他函数之前对其进行解构。

有关* args和** kwargs的进一步阅读,您可以访问此网站:*args and **kwargs in python