使用 pyodbc 在 SQL 服务器中创建模式

Create a schema in SQL Server using pyodbc

我正在使用 pyodbc 从 SQL 服务器数据库读取数据,并在其他地方的不同数据库中创建相同结构的类似副本。

本质上:

  for db in source_dbs:
    Execute('create database [%s]' % db)  # THIS WORKS.
    for schema in db:
      # The following result in an error starting with:
      #   [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]

      Execute('create schema [%s].[%s]' % (db, schema)
      # Incorrect syntax near '.'

      Execute('use [%s]; create schema [%s]' %(db, schema)
      # CREATE SCHEMA' must be the first statement in a query batch.

在此示例中,您可以假设 Execute 使用 pyodbc 创建游标并执行参数 SQL 字符串。

我能够创建空数据库,但我不知道如何在其中创建模式。

是否有解决方案,或者这是将 pyodbc 与 MS SQL 服务器一起使用的限制?

编辑:FWIW - 我还尝试将数据库名称传递给 Execute,因此我可以尝试在连接字符串中设置数据库名称。这也不起作用 - 它似乎完全忽略了数据库名称。

Python 数据库连接通常默认启用事务 (autocommit == False) 并且 SQL 服务器往往不喜欢在事务中执行某些 DDL 命令。

我刚刚尝试了以下方法,它对我有用:

import pyodbc
connStr = (
    r"Driver={SQL Server Native Client 10.0};"
    r"Server=(local)\SQLEXPRESS;"
    r"Trusted_connection=yes;"
)
cnxn = pyodbc.connect(connStr, autocommit=True)
crsr = cnxn.cursor()
crsr.execute("CREATE DATABASE pyodbctest")
crsr.execute("USE pyodbctest")
crsr.execute("CREATE SCHEMA myschema")
crsr.close()
cnxn.close()