Здравствуйте!
Получаю данные через машину состояний от пользователя, заношу их в словарь. Но при попытке занести их в таблицу базы данных, возникает ошибка TypeError: not enough arguments for format string
Вот более полный текст ошибки:
response = await handler_obj.handler(*args, **partial_data)
File "D:\OpenServer\domains\jobbot.local\handlers\naked.py", line 179, in get_email
await dbusers.addNewApplicant(state)
File "D:\OpenServer\domains\jobbot.local\db\dbusers.py", line 74, in addNewApplicant
res = cursor.execute(sql, tuple(data.values()))
File "D:\OpenServer\domains\jobbot.local\venv\lib\site-packages\pymysql\cursors.py", line 146, in execute
query = self.mogrify(query, args)
File "D:\OpenServer\domains\jobbot.local\venv\lib\site-packages\pymysql\cursors.py", line 125, in mogrify
query = query % self._escape_args(args, conn)
TypeError: not enough arguments for format string
Код последних двух состояний и записи их в словарь:
@dp.message_handler(state=FSMNewapplicant.phone)
async def get_phone(message: types.Message, state: FSMContext):
async with state.proxy() as data:
if message.text == 'Пропустить':
data['phone'] = 'empty'
else:
data['phone'] = message.text
await FSMNewapplicant.next()
await message.reply("Укажите ваш e-mail адрес (необязательно)\n\nЛибо пропустите шаг", reply_markup=skip_step)
@dp.message_handler(state=FSMNewapplicant.email)
async def get_email(message: types.Message, state: FSMContext):
async with state.proxy() as data:
if message.text == 'Пропустить':
data['email'] = 'empty'
else:
data['email'] = message.text
await state.finish()
await dbusers.addNewApplicant(state)
successText = '''
Ваша анкета успешно создана
'''
await bot.send_message(message.from_user.id, successText)
Вот код функции addNewApplicant:
async def addNewApplicant (state):
# Подключиться к базе данных.
connection = pymysql.connect(host='127.0.0.1',
user='root',
password='admin',
db='testbot',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
print (state)
# print ("connect successful addNewApplicant!")
cursor = connection.cursor()
try:
async with state.proxy() as data:
# SQL
sql = "INSERT INTO `anketa` "\
"(`tg-id`, `tg-login`, `firstname`, `lastname`, `patronymic`, `line-business`, `line-business-id`, `career-objective`, "\
"`desired-salary`, `city-work`, `work-experience`, `desired-work-schedule`, `phone`, `email`) "\
"VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
print(sql)
# Выполнить команду запроса (Execute Query).
# есть пользователь с этим ником в базе
res = cursor.execute(sql, tuple(data.values()))
connection.commit()
return res
finally:
# Закрыть соединение (Close connection).
connection.close()