python - 使用 pyodbc 在 SQL Server 中创建模式

标签 python sql-server pyodbc

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

本质上:

  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 Server 一起使用的限制?

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

最佳答案

Python 数据库连接通常默认启用事务(autocommit == False),而 SQL Server 往往不喜欢在事务中执行某些 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()

关于python - 使用 pyodbc 在 SQL Server 中创建模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831375/

相关文章:

mysql - 在 python 中使用 pythonanywhere 的 MySQL 数据库

python - 为什么在python中解析xml文件会在文件中 "/>"的地方添加空格?

c# - 在一种方法中构造多个查询的最佳方法 c# asp.net

python - 从 ubuntu docker 镜像中删除 perl 会导致 pyodbc 失败

oracle - "ORA-12560: TNS:protocol adapter error"使用完整连接字符串和 EZCONNECT 绕过 tnsnames.ora 时

sql - 在两个数据库表中进行循环引用是一种好习惯吗

python - 导入 _tkinter 还是 tkinter?

python - 如何在 Python 中使用多处理时解决 BrokenPipeError

python - 使用python来分隔列

mysql - Google Cloud SQL 无缘无故地增加大小直到磁盘已满