使用 sqlalchemy 1.0.4、python 3.4.3 和 pyodbc 3.0.10。
我想为 MS SQL 服务器创建一个带有原始 sql 的数据库。
c = "mssql+pyodbc://sa:admin11$$@PROIMT01\SQLEXPRESS/master?driver=SQL+Server+Native+Client+11.0"
e = create_engine(c,echo=True)
con = e.connect()
con.execute("CREATE DATABASE xb;")
con.close()
但是上面的代码返回错误“create database statement not allowed within multi-statement transaction”
。
我在创建脚本之前尝试了 con.execute("commit")
,但它什么也没做。
更新
如果我设置驱动程序 ?driver=SQL+SERVER
它有效!?
最佳答案
似乎有几种方法可以做到这一点,关键是自动提交。我无法只切换到 SQL SERVER,因为它似乎会导致 apache 出现问题。 如果你只想使用 pyodbc,你可以这样做:
import pyodbc
conn =pyodbc.connect("driver={SQL Server Native Client 11.0};server=databaseBName; database=master; trusted_connection=yes;", autocommit=True)
curr = conn.execute("CREATE DATABASE databaseName ON (FILENAME='E:\\SQL\\path_to_file.mdf') FOR ATTACH;")
curr.close()
您还可以使用 sqlalchemy 创建连接:
import sqlalchemy
engine = sqlalchemy.create_engine("mssql+pyodbc://serverName/master?driver=SQL Server Native Client 11.0;", connect_args = {'autocommit':True})
engine.execute("CREATE DATABASE databaseName ON (FILENAME='E:\\SQL\\path_to_file.mdf') FOR ATTACH;")
我一直在按文件附加,但我认为它在没有文件的情况下也能正常工作。
关于python - 多语句事务中不允许sqlalchemy MSSQL创建数据库语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30797319/