def simple_query(self, sql):
self.cursor.execute(sql)
и
x.simple_query("INSERT INTO document_control (person) values ('%s')", values)
Здесь вы передаете 2 аргумента simple_query
(строка запроса и values
), но он принимает только один, sql
(self
- это например, x
, и передается неявно).
Другие ответы делают ваш код работоспособным, но также делают его уязвимым для SQL инъекции .
Например, если кто-то введет строку a'); delete from document_control; --
в GUI, тогда выполненный запрос будет
INSERT INTO document_control (person) values ('a'); delete from document_control; -- ')
Не очень хорошо ...
Вместо использования строковой интерполяции вы должны использовать параметризованный запрос. Это можно сделать, разрешив simple_query
принять необязательный кортеж arguments
.
def simple_query(self, sql, args=None):
if not args:
self.cursor.execute(sql)
else:
self.cursor.execute(sql, args)
Имейте в виду, что args
должен быть кортежем или списком.