Задать вопрос
@TanderOFF

Как избегать блокировки BD?

Здравствуйте, уже как месяц встречаю каждый день ошибку:
sqlite3.OperationalError: database is locked
База данных уходит в блокировку и проект дальше не функционирует , транзакции фиксирую сразу после обновлений данных .
Но ошибка всё же остаётся и выскакивает после дня работы бота спонтанно, решение только пока-что одно
Перезапускать проект .
Пробывал принтами искать ошибку , но транзакции фиксируются нормально и базу не оставляю открытой. Ошибка я так понимаю из за большой нагрузки на базу . Переход на другие базы не вариант для меня
  • Вопрос задан
  • 4029 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
@acwartz
Тут должна быть ваша реклама.
Как осуществляется доступ к базе данных? Потоки есть? как они работают с БД?
SQLite это однопользовательская БД с одной точкой доступа. У неё нет понятия сессий и доступа к ней из разных потоков и тем более под разными учетными записями. Считайте что наливаете тысячи литров воды в бассеин через угольное ушко, используя сифон (воронку).
и где весь стэк? хотяб по внутренностям пакета sqlite чтобы видеть что вы дергаете и с чем оно падает.
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
Ошибка я так понимаю из за большой нагрузки на базу . Переход на другие базы не вариант для меня

Тогда терпеть и отлавливать sqlite3.OperationalError с соответствующей обработкой
Ответ написан
axifive
@axifive
Software Engineer
Для бота лучше конечно полноценную базу использовать. Но раз критично именно sqlite, то ознакомьтесь с нюансами блокировок в официальном wiki

Как временное решение можете с timeout поиграться:
conn = sqlite3.connect(database, timeout=7) # стандартный таймаут 5 сек
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы