Не удалось создать базу данных с помощью хранимой процедуры pyodbc SQL SERVER - PullRequest
3 голосов
/ 24 апреля 2019

Я пытаюсь вызвать хранимую процедуру, которая создает базу данных из pyodbc

Ниже приведен минимальный пример кода

import pyodbc
conn = pyodbc.connect("Driver={SQL Server};Server=SERVERNAME;Trusted_Connection=yes;")
cursor=conn.cursor()
cursor.execute("""\
    DECLARE @RC int
    DECLARE @ClientName varchar(255)
    SET @ClientName = 'Test'
    EXECUTE @RC = [DB_NAME].[SCHEMA].[sp_NAME] @ClientName
""")
conn.commit()

Код в идеале должен создать базу данных с именем ' Проверка 'в экземпляре SQL Server.Это не приводит к ошибке.Но база данных не создана.

Запуск

DECLARE @RC int
DECLARE @ClientName varchar(255)
SET @ClientName = 'Test'
EXECUTE @RC = [DB_NAME].[SCHEMA].[sp_NAME] @ClientName

Из SSMS, кажется, для создания базы данных.Уже отослал пару вопросов, включая этот .

1 Ответ

2 голосов
/ 24 апреля 2019

Python DB API 2.0 указывает, что по умолчанию соединения должны быть открыты с отключенной автоматической фиксацией. Однако многие базы данных требуют, чтобы в транзакции выполнялись операторы DDL , а не . Попытки выполнить операторы DDL с отключенной автоматической фиксацией могут привести к ошибкам или неожиданным результатам.

Поэтому безопаснее убедиться, что операторы DDL выполняются в соединении, в котором включена автоматическая фиксация. Это можно сделать, установив autocommit=True при открытии соединения ...

cnxn = pyodbc.connect(connection_string, autocommit=True)

... или путем включения autocommit в существующем соединении ...

cnxn = pyodbc.connect(connection_string)
# ...
cnxn.autocommit = True
...