2009-06-30 1 views
2

У меня есть имя пользователя, которое я должен изменить в многочисленных (до ~ 25) таблицах. (Да, я знаю.) Кажется, что атомная сделка - это способ пойти на такое. Однако я не знаю, как это сделать с pyodbc. Раньше я видел различные учебники по атомным транзакциям, но никогда их не использовал.В Python, используя pyodbc, как вы выполняете транзакции?

Установка: платформа Windows, Python 2.6, pyodbc, Microsoft SQL 2005. Я использовал pyodbc для отдельных операторов SQL, но никаких составных операторов или транзакций.

Рекомендации по SQL, похоже, показывают, что создание хранимой процедуры отлично подходит для этого. Мои опасения по поводу выполнения хранимой процедуры следующие, в порядке возрастания важности: 1) Я никогда не писал хранимую процедуру. 2) Я слышал, что pyobbc еще не возвращает результаты хранимых процедур. 3) Это определенно не моя база данных. Он поставляется с поставщиками, обновляется продавцом и так далее.

Итак, что является лучшим способом для этого?

ответ

-3

Я не думаю, что pyodbc имеет определенную поддержку для транзакций. Вам необходимо отправить команду SQL для запуска/фиксации/отката транзакций.

8

В своем documentation pyodbc поддерживает транзакции, но только если драйвер odbc поддерживает его. Кроме того, поскольку pyodbc соответствует PEP 249, данные сохраняются только при выполнении ручной фиксации.
Однако он также поддерживает функцию autocommit, и в этом случае вы не можете совершать какие-либо транзакции.

Вы должны проверить подключение, когда он выполняется

cnxn = pyodbc.connect(cstring, autocommit=True) 

или явно отключить режим автоматической фиксации с

cnxn.autocommit = False 

Примечание: Вы можете получить более подробную информацию о режиме автоматической фиксации в pyodbc на его wiki

Как только автокоммит выключен, вам необходимо явно совершить() транзакцию или откат() всего цикла saction.

Смежные вопросы