Одна из возможностей - выполнить оператор «установить транзакцию только для чтения», как показано в следующем коде:
import cx_Oracle
conn = cx_Oracle.connect("cx_Oracle/welcome")
cursor = conn.cursor()
cursor.execute("set transaction read only")
cursor.execute("insert into c values (1, 'test')")
Это приведет к следующей ошибке:
ORA-01456: можетне выполнять операцию вставки / удаления / обновления внутри транзакции READ ONLY
Конечно, вам необходимо убедиться, что вы создали класс Connection, который вызывает этот оператор при его первом создании и после каждой фиксации () и откат () вызов.И это все еще можно обойти, вызвав блок PL / SQL, который выполняет фиксацию или откат.
Единственная другая возможность, о которой я могу думать прямо сейчас, - это создание ограниченного пользователя или роли, которая просто неиметь возможность вставлять, обновлять, удалять и т. д. и убедиться, что приложение использует этого пользователя или роль.Это, по крайней мере, защита от дурака, но гораздо больше усилий впереди!