2014-09-04 3 views
2

Я пытаюсь создать базу данных с помощью pyodbc, однако я не могу найти, что это парадокс, поскольку сначала необходимо подключиться к базе данных, а новая база данных создается в связанной. Пожалуйста, поправьте меня, если я ошибаюсь.создать базу данных с помощью pyodbc

В моем случае, я использовал следующий код, чтобы создать новую базу данных

conn = pyodbc.connect("driver={SQL Server};server= serverName; database=databaseName; trusted_connection=true") 

cursor = conn.cursor() 

sqlcommand = """ 
        CREATE DATABASE ['+ @IndexDBName +'] ON PRIMARY 
        (NAME = N'''+ @IndexDBName+''', FILENAME = N''' + @mdfFileName + ''' , SIZE = 4000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB) 
        LOG ON 
        (NAME = N'''+ @IndexDBName+'_log'', FILENAME = N''' + @ldfFileName + ''' , SIZE = 1024KB , MAXSIZE = 100GB , FILEGROWTH = 10%)' 
      """ 

cursor.execute(sqlcommand) 

cursor.commit() 

conn.commit() 

Приведенный выше код работает без ошибок, однако, нет никакой базы данных создана.

Так как я могу создать базу данных с помощью pyodbc?

Большое спасибо.

ответ

7

Если вы попытаетесь создать базу данных со значением по умолчанию для autocommit, вы должны получить сообщение об ошибке, как показано ниже. Если вы не видите это сообщение об ошибке, попробуйте обновить собственный клиент SQL Server для более описательный сообщения:

pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][SQL Server Native Client 11.0] 
[SQL Server]CREATE DATABASE statement not allowed within multi-statement transaction. 
(226) (SQLExecDirectW)') 

Включите AUTOCOMMIT для подключения к постановляю:

conn = pyodbc.connect("driver={SQL Server};server=serverName; database=master; trusted_connection=true", 
         autocommit=True) 

Примечание две вещи:

  • autocommit не является частью строки подключения, это отдельное ключевое слово передается connect функции
  • указать исходный контекст соединения с базой данных является master системы базы данных

Как в стороне, вы можете проверить @IndexDBName, @mdfFileName и @ldfFileName в настоящее время надлежащим образом установлены в вашем T-SQL. С кодом, который вы предоставили, будет создана база данных с именем '+ @IndexDBName +'.

Смежные вопросы