使用 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()
我正在使用 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()