Какой самый надежный способ определить, какие операторы «запрашивают», а не «модифицируют»?Например, SELECT
против UPDATE / INSERT / CREATE
.
Сам по себе анализ заявления кажется очевидной первой попыткой, но я не могу не думать, что это было бы ошибочным решением.Просто поиск SELECT
в начале не работает, так как PRAGMA также может возвращать результаты, и я уверен, что существует множество способов, которыми стратегия может потерпеть неудачу.Тестирование на нулевые строки, возвращаемые курсором, также не работает, поскольку SELECT может явно возвращать нулевые результаты.
Я работаю с SQLite через модуль Python sqlite3.