В сообщении говорится, что ни в одной базе данных нет схемы с именем schema.
В документации схема выделена курсивом, что указывает на то, что оно является символическим, а не фактическим значением и будет заменено на соответствующее значение; это значение используется для различения подключенных баз данных.
например, если вы использовали
ATTACH DATABASE the_database_path AS database2 /*<<<<<<<<<< THE SCHEMA is database2 */;
, то вы могли бы использовать
PRAGMA database2.wal_checkpoint(FULL);
для проверки присоединенной базы данных.
Исходная схема базы данных: main , но не является обязательным, поскольку используется по умолчанию, если схема не указана.
Следовательно, почему c.execute('PRAGMA wal_checkpoint(FULL)')
работал (как c.execute('PRAGMA main.wal_checkpoint(FULL)')
). т. е. фактически одинаковы.
Если вы используете c.execute("PRAGMA wal_autocheckpoint = 0")
, вам придется управлять всеми контрольными точками, так как автоматическая контрольная точка будет отключена (обратите внимание, что закрываются все контрольные точки соединений с базой данных).
Вы можете рассмотреть следующие вопросы: -
Отключение механизма автоматической проверки. В конфигурации по умолчанию SQLite будет проверять файл WAL при завершении любой транзакции, если длина файла WAL превышает 1000 страниц. Однако существуют параметры времени компиляции и времени выполнения, которые могут отключить или отложить эту автоматическую контрольную точку. Если приложение отключает автоматическую контрольную точку, ничто не мешает чрезмерному росту файла WAL. Запись в режиме записи - 6. Избегание чрезмерно больших файлов WAL
Я бы посоветовал не использовать PRAGMA wal_autocheckpoint = 0
autocheckpointing не препятствует принудительной контрольной точке, кроме случаев, когда принудительная контрольная точка возникает после автоматической контрольной точки (и всестраницы записаны) и ничего не было обновлено, тогда это ничего не изменит (изящно), иначе в файл базы данных будет записано больше страниц.