从Python创建SQL Server数据库
我正在使用Python和pywin32的adodbapi编写脚本来创建SQL Server数据库及其所有相关的表,视图和过程。问题是Python的DBAPI要求cursor.execute()包含在仅由cursor.commit()提交的事务中,并且您不能在用户事务中执行drop或create database语句。关于如何解决这个问题的任何想法?
编辑:
对于adodbapi的connect()方法或其cursor()方法,似乎没有类似于autocommit参数的任何内容。我很乐意使用pymssql而不是adodbapi,除了它将char和varchar数据类型截断为255个字符。
我在发布之前尝试过这个;这是追溯。
Traceback (most recent call last):
File "demo.py", line 39, in <module>
cur.execute("create database dummydatabase")
File "C:Python26libsite-packagesadodbapiadodbapi.py", line 713, in execute
self._executeHelper(operation,False,parameters)
File "C:Python26libsite-packagesadodbapiadodbapi.py", line 664, in _executeHelper
self._raiseCursorError(DatabaseError,tracebackhistory)
File "C:Python26libsite-packagesadodbapiadodbapi.py", line 474, in _raiseCursorError
eh(self.conn,self,errorclass,errorvalue)
File "C:Python26libsite-packagesadodbapiadodbapi.py", line 60, in standardErrorHandler
raise errorclass(errorvalue)
adodbapi.adodbapi.DatabaseError:
--ADODBAPI
Traceback (most recent call last):
File "C:Python26libsite-packagesadodbapiadodbapi.py", line 650, in _executeHelper
adoRetVal=self.cmd.Execute()
File "<COMObject ADODB.Command>", line 3, in Execute
File "C:Python26libsite-packageswin32comclientdynamic.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
没有找到相关结果
已邀请:
4 个回复
薄扩络拜
会在每次提交后自动启动新事务。 DB-API默认情况下需要关闭自动提交,它允许API方法重新打开它,但我在adodbapi中没有看到。 您可以使用
属性来解决此问题,使用ADO api代替DB-API将您带出任何事务。让我知道这个是否奏效:
这是adodbapi commit()方法的源代码。
席酱
打开连接以获得DDL样式的自动提交。 此外,您可能需要考虑使用不同的连接来运行DDL。 例如,http://pymssql.sourceforge.net/显示了这样执行的DDL。
掸牛浓疗
目浆搽
据我所知,这重新启用了标准的SQL Server自动提交功能,即每个SQL语句都会自动提交。缺点是,如果我不想在交易中运行某些东西,我就无法再次启动交易(因为当
时
将无效)。