Ошибка database is locked
Есть бот который парсит посты с сообществ Вконтакте и отправляет их в тг канал.
Подключена база данных, имеется функция update_status
Она отвечает за обновление статуса после того как пост отправился в канал. При обновления статуса происходит ошибка database is locked
. Из ошибки я понял что SQL3 пытается одновременно выполнить несколько изменений в таблице, поэтому происходит блокировка.
Хэндлер бота где происходит отправка постов и их обновление:
Ошибку показывает в строчке update_status()
@dp.message_handler(commands=["Pars"])
async def cmd_pars(message: types.Message):
await message.answer("Начал процесс сбора данных")
while True:
post_date()
res = select_res()
for x in res:
rest = '\n'.join(x)
if len(rest) < 400:
await bot.send_message(chat_id=-ЧАТ_ID, text=rest)
time.sleep(3)
update_status()
await asyncio.sleep(60)
Функция запроса SQL:
Ошибка возникает в return update()
# Обновляем статус
def update_status():
with sq.connect("data_pars.db") as db:
cur = db.cursor()
update = cur.execute("UPDATE vk_post SET status=True")
db.commit()
return update
Пробовал убирать db.commit()
в запросе, удалял полностью бд, не могу понять как они конкурируют между собой.
Ошибка:
Task exception was never retrieved
future: <Task finished name='Task-9' coro=<Dispatcher._process_polling_updates() done, defined at C:\тг бот тест\venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py:407> exception=OperationalError('database is locked')>
Traceback (most recent call last):
File "C:\тг бот тест\venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 415, in _process_polling_updates
for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\тг бот тест\venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 235, in process_updates
return await asyncio.gather(*tasks)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\тг бот тест\venv\Lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\тг бот тест\venv\Lib\site-packages\aiogram\dispatcher\dispatcher.py", line 256, in process_update
return await self.message_handlers.notify(update.message)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\тг бот тест\venv\Lib\site-packages\aiogram\dispatcher\handler.py", line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\тг бот тест\Парсер вк групп\bot_pars_vk.py", line 37, in cmd_pars
update_status()
File "C:\тг бот тест\Парсер вк групп\sqlite.py", line 41, in update_status
db.commit()
sqlite3.OperationalError: database is locked
Источник: Stack Overflow на русском