我正在使用 Python 和 pywin32 的 adodbapi 编写脚本来创建 SQL Server 数据库及其所有关联的表、视图和过程。问题在于 Python 的 DBAPI 要求将 cursor.execute() 包装在仅由 cursor.commit() 提交的事务中,并且您不能在用户事务中执行删除或创建数据库语句。关于如何解决这个问题的任何想法?
编辑:
似乎没有任何类似于 adodbapi 的 connect() 方法或其 cursor() 方法的自动提交参数。我很乐意使用 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