我正在使用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,因此我可以尝试在连接字符串中设置数据库名称。这也不起作用 - 它似乎完全忽略了数据库名称。
答案 0 :(得分:2)
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()