Я использую Python с adodbapi pywin32 для написания сценария для создания базы данных SQL Server и всех связанных с ней таблиц, представлений и процедур. Проблема в том, что для DBAPI Python требуется, чтобы cursor.execute() был заключен в транзакцию, которая выполняется только с помощью cursor.commit(), и вы не можете выполнить команду drop или create database в транзакции пользователя. Любые идеи о том, как обойти это?Создание базы данных SQL Server из Python
EDIT:
Там, кажется, не будет ничего аналогично параметру автоматической фиксации либо метода подключения() из adodbapi или способа его курсора(). Я был бы рад использовать pymssql вместо adodbapi, за исключением того, что он обрезает типы данных char и varchar с 255 символами.
Я попробовал это перед публикацией; вот трассировка.
Traceback (most recent call last):
File "demo.py", line 39, in <module>
cur.execute("create database dummydatabase")
File "C:\Python26\lib\site-packages\adodbapi\adodbapi.py", line 713, in execute
self._executeHelper(operation,False,parameters)
File "C:\Python26\lib\site-packages\adodbapi\adodbapi.py", line 664, in _executeHelper
self._raiseCursorError(DatabaseError,tracebackhistory)
File "C:\Python26\lib\site-packages\adodbapi\adodbapi.py", line 474, in _raiseCursorError
eh(self.conn,self,errorclass,errorvalue)
File "C:\Python26\lib\site-packages\adodbapi\adodbapi.py", line 60, in standardErrorHandler
raise errorclass(errorvalue)
adodbapi.adodbapi.DatabaseError:
--ADODBAPI
Traceback (most recent call last):
File "C:\Python26\lib\site-packages\adodbapi\adodbapi.py", line 650, in _executeHelper
adoRetVal=self.cmd.Execute()
File "<COMObject ADODB.Command>", line 3, in Execute
File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 258, in _ApplyTypes_
result = self._oleobj_.InvokeTypes(*(dispid, LCID, wFlags, retType, argTypes) + args)
com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft SQL Native Client', u'CREATE DATABASE statement not allowed within multi-statement transaction.', None, 0, -2147217900), None)
-- on command: "create database dummydatabase"
-- with parameters: None
Это близко. Что в итоге получилось: conn.adoConn.Execute ("создать базу данных dummydatabase") Спасибо! Возможно, я никогда не подумал об этом. – JasonFruit