Я пытаюсь создать базу данных из внешнего файла sqlite, используя этот класс Python, но я получаю это сообщение об ошибке:

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')
1
cashmeer 28 Май 2017 в 02:33

2 ответа

Лучший ответ

Ваш query принимает только один аргумент arg, но вы передаете self (неявно) и 'test_setup.sql' и 'r'. Учитывая, что вы не используете 'r', вам, вероятно, следует только вызвать:

dbmgr = DatabaseManager("testdb.db")
dbmgr.query('test_setup.sql')
1
MSeifert 27 Май 2017 в 23:39

Если вы посмотрите на объявление запроса для вашего класса, вы увидите, что у вас есть два параметра: self и arg

Однако при вызове функции запроса передаются три параметра: неявное self, которое вам не нужно упоминать, db и параметр.

Если вы хотите, чтобы arg был множественным аргументом, вам нужно переписать его следующим образом: * arg. В противном случае вы можете изменить объявление запроса для трех параметров.

Имейте в виду, что * arg является итеративным, и вам может потребоваться деконструировать его перед передачей другим функциям.

Для получения дополнительной информации о * args и ** kwargs вы можете посетить этот сайт: * args и ** kwargs в питоне

0
Simon Marcoux 27 Май 2017 в 23:49