J'utilise Python avec adodbapi de pywin32 pour écrire un script pour créer une base de données SQL Server et toutes ses tables associées, des vues et des procédures. Le problème est que DBAPI de Python nécessite que cursor.execute() soit enveloppé dans une transaction qui est uniquement validée par cursor.commit(), et vous ne pouvez pas exécuter une instruction drop ou create database dans une transaction utilisateur. Des idées sur la façon de contourner cela?Création d'une base de données SQL Server à partir de Python
EDIT:
Il ne semble pas être quelque chose d'analogue à un paramètre autocommit soit la méthode connect() de adodbapi ou la méthode du curseur(). Je serais heureux d'utiliser pymssql au lieu d'adodbapi, sauf qu'il tronque les types de données char et varchar à 255 caractères. J'ai essayé cela avant de poster; voici le retraçage.
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
C'est proche. Qu'est-ce qui a finalement travaillé était: conn.adoConn.Execute ("créer une base de données dummydatabase") Merci! Je n'aurais peut-être jamais compris ça. – JasonFruit