我正在尝试使用此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')
答案 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