python - 多语句事务中不允许sqlalchemy MSSQL创建数据库语句

标签 python sql-server sqlalchemy

使用 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/

相关文章:

SQL Server 累积用户数天

python - 如何在 SQLAlchemy 中编写生成更新

python - Pandas Dataframe - 将前一列中与特定条件匹配的所有值相加并将其添加到新列中

python:通过 if/elif 语句传递一个值

Python 奇怪的 int 行为

sql-server - 无法使用 sqlcmd 连接到 Azure DB

python - 我可以在 Python 3.6 之前的版本中使用 secrets 模块吗?

sql-server - VBA只清除数据透视表缓存,但保留数据透视表结构

python - 运行 SQLalchemy 立即导致与数据库的连接中止

python - 如何避免因并发创建/更新而发生完整性错误?