Найти - Пользователи
Полная версия: pyodbc и MSSQL
Начало » Базы данных » pyodbc и MSSQL
1
warpson
Здравствуйте.

Зашла в тупик моя попытка пробиться к данным VFP из питона (с linux платформы ):

1. вариант просто из isql прекрасно отрабатывает чтение
exec ('select * from pdoc where numdoc_p=51490') at FTEST
и даже UPDATE

2. то же самое в питоне
import pyodbc


cnxn=pyodbc.connect(DSN='mssql-office',UID='sa',pwd='…')
cnxn.autocommit=True

cursor=cnxn.cursor()

sqlstmt='select * from pdoc where numdoc_p=51490'

print “exec ('”+sqlstmt+“') at FTEST”
cursor.execute(“exec ('”+sqlstmt+“') at FTEST”)
падает с ошибкой
exec ('select * from pdoc where numdoc_p=51490') at FTEST
Traceback (most recent call last):
File “Draft3b.py”, line 15, in <module>
cursor.execute(“exec ('”+sqlstmt+“') at FTEST”)
pyodbc.ProgrammingError: ('42000', ' The requested operation could not be performed because OLE DB provider “VFPOLEDB” for linked server “FTEST” does not support the required transaction interface. (7390) (SQLExecDirectW)')
ODBC-соединение одно и то же
Цель - делать update на MSSQL linkedserver

Может быть можно изменить свойства cnxn ?
villager
так не надо
cursor.execute("exec ('"+sqlstmt+"') at FTEST")
так надо
cursor.execute(sqlstmt)
warpson
2villager: AT относится к linkedserver и является расширением Transact-SQL для SQL2005

По сабжу - интуитивно нашел объяснение :

when you run it in a tool like WinSql/isql a simple transaction is used.

When you run a dml statement (insert, update, delete) against a linked server, a distributed transaction is started;

It's controlled by the MSDTC = Distributed Transaction Coordinator; MSDTC has to run on both server, see: http://msdn.microsoft.com/en-us/library/ms190799.aspx
Вот теперь думаю, как обойти “Distributed Transaction”
То ли отменить как-то в pyodbc начало транзакции (не Autocommit=False, а вообще) ?
warpson
В общем, к Python вопросов нет - он ни причем : модель ADO так устроена.

subj решается на уровне модели транзакции и обходится двумя способами :

1. либо тупой вызов из питона 'isql < script_с_апдейтом
2. либо настройкой linkedserver option

Тема закрыта.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB