Определение модифицирующих операторов из неизменяемых в SQLite - PullRequest
0 голосов
/ 29 мая 2011

Какой самый надежный способ определить, какие операторы «запрашивают», а не «модифицируют»?Например, SELECT против UPDATE / INSERT / CREATE.

Сам по себе анализ заявления кажется очевидной первой попыткой, но я не могу не думать, что это было бы ошибочным решением.Просто поиск SELECT в начале не работает, так как PRAGMA также может возвращать результаты, и я уверен, что существует множество способов, которыми стратегия может потерпеть неудачу.Тестирование на нулевые строки, возвращаемые курсором, также не работает, поскольку SELECT может явно возвращать нулевые результаты.

Я работаю с SQLite через модуль Python sqlite3.

1 Ответ

1 голос
/ 29 мая 2011

Используйте API-вызов sqlite3_changes , который также доступен из SQL, используя функцию changes .

Как упоминалось в TokenMacGuy, вы можете откатить транзакцию, содержащую инструкцию, вызвавшую изменения;sqlite3_changes функция сообщит вам, если это необходимо.

Существует также обратный вызов update_hook , если вам нужна более подробная информация о затронутых таблицах и строках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...