sqlite3 в консоли всегда скажет, что удалено 0 строк
Удаляешь записи из базы, следующей командой проверяешь SELECT changes() — ноль. Начинаешь искать, почему DELETE не сработал. А он сработал.
changes() живёт в рамках соединения. Отдельный вызов sqlite3 — это новый процесс и новое соединение, где изменений действительно не было. Проверять надо количеством строк.
<pre># врёт: всегда 0
sqlite3 base.db "DELETE FROM items WHERE id=42;"
sqlite3 base.db "SELECT changes();"
# правда
sqlite3 base.db "DELETE FROM items WHERE id=42; SELECT changes();"
sqlite3 base.db "SELECT count(*) FROM items WHERE id=42;"</pre>
Команда напечатала «удалено строк: 0», хотя записи исчезли — count(*) по тем же id вернул 0 из 3.
<i>Проверяйте результат, а не индикатор результата.</i>
Post #512
20
