Непоследовательное поведение курсора sqlite при изменении базовой базы данных

Лучшее, что вы можете сделать, это использовать unicodedata.normalize() для разложения символа, а затем отфильтровать акценты.

Не забудьте использовать unicode и unicode литералов в вашем коде.

0
задан Jonas B. 1 March 2019 в 14:33
поделиться

1 ответ

К сожалению, так работает SQLite. Из Изоляция в SQLite :

... Но как быть с изменениями, которые происходят во время выполнения оператора SELECT? Что, если оператор SELECT запущен, а интерфейс sqlite3_step () проходит примерно половину своего вывода, тогда некоторые операторы UPDATE выполняются приложением, которое изменяет таблицу, которую читает оператор SELECT, а затем выполняется больше вызовов sqlite3_step () закончить оператор SELECT? Увидят ли последующие шаги оператора SELECT изменения, сделанные UPDATE, или нет? Ответ заключается в том, что это поведение не определено ... И, следовательно, разработчики должны старательно избегать написания приложений, которые делают предположения о том, что произойдет в этих обстоятельствах.

Это означает, что SQLite может обеспечить некоторую изоляцию между различными соединениями с одной и той же базой данных (будьте осторожны, только одна из них должна писать), но вы не должны пытаться изменять базу данных, по крайней мере, таблицы, которые читаются между началом и концом SELECT.

0
ответ дан Serge Ballesta 1 March 2019 в 14:33
поделиться
Другие вопросы по тегам:

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