当前位置: 首页 > 面试题库 >

使用pyodbc时,“多语句事务中不允许使用CREATE…语句”

邢博学
2023-03-14
问题内容

我正在尝试使用pyodbc创建一个SQL Server数据库。

import pyodbc 
server = 'AMR112\NAMED1' 
database = 'msdb' 
username = '' 
password = 'mypassword' 
abcd='yes' 
ghi='False' 
#driver = '{/usr/local/lib/libtdsodbc.so}' #for linux of windows 
driver= '{ODBC Driver 13 for SQL Server}' 
cnxn = pyodbc.connect('DRIVER='+driver+';PORT=1433;SERVER='+server+??';PORT=1443;DATABASE??='+database+';UID='+??username+';PWD='+ password+';trusted_connection='+ abcd+'; autocommit='+ ghi) cursor = cnxn.cursor() 
cursor.execute("create database dbafgh") 
row = cursor.fetchone() 
if row: 
    print row 
cursor.close()

失败并显示此错误

多语句事务中不允许使用CREATE DATABASE语句

它失败,因为该.execute方法启动了事务,CREATE DATABASE并且无法在事务内运行。

那么还有其他方法可以CREATE DATABASE使用python执行命令吗?


问题答案:

建立连接时,pyodbc的默认设置autocommit=False符合Python的DB-
API规范。因此,当执行第一个SQL语句时,ODBC将开始有效的数据库事务,直到Python代码对连接执行a.commit()或a为止.rollback()

SQL Server不允许CREATE DATABASE在这样的事务中执行,因此我们需要autocommit在发出此类语句之前以模式进行连接。打开连接时可以完成…

conn = pyodbc.connect(conn_str, autocommit=True)

…或者autocommit如果已经建立连接,则切换到模式:

conn = pyodbc.connect(conn_str)  # autocommit=False by default
# ...
conn.autocommit = True
conn.execute("CREATE DATABASE MyNewDatabase")


 类似资料:
  • 问题内容: 我正在使用pyodbc驱动程序使用SQL连接到Microsoft访问表。有谁知道我要如何替换此表中的字段?我虽然要删除行,然后再放回行,但是由于访问中的自动编号,这将更改主键。 我有这个要插入到进度表中: 那么我将如何替换这些字段。假设我想将CockpitDrill从‘2’更改为‘3’,(它们都是字符串)。 任何帮助将不胜感激。 问题答案: 您可以像现在执行INSERT一样执行UPDA

  • 问题内容: 我有一个关于在Oracle SQL函数中使用集合的问题。 包中有类型的定义: 问题出在功能_2中。function_2使用来自function_1的输出。当我尝试在function_2中进行选择时,会出现错误消息。错误消息“ SQL语句中不允许使用本地集合类型”。 能否请你帮忙?在函数中使用集合有什么问题? 问题答案: 要达到此目的,您应该使用类似以下内容的方法: 创建或替换类型typ

  • 本文向大家介绍允许远程用户访问mysql服务sql语句,包括了允许远程用户访问mysql服务sql语句的使用技巧和注意事项,需要的朋友参考一下 mysql> grant all privileges on cakephp.* to cakephp@192.168.14.1 identified by 'lpfukia'; Query OK, 0 rows affected (0.01 sec) m

  • 问题内容: 我正在使用语句,以便将输入插入到SQL Server数据库表中。如何在块中执行多个条件。请参考下面的代码。 当前,它仅执行此行。如何执行条件中的所有3行()。 前任 : 这就是我的期望。我只想更新旧字段()并将记录插入同一张表。我不能用逗号分隔这些语句。SQL发出 语法错误 谢谢你。 问题答案: 您可以使用 它来实现: 请记住,此方法有一些局限性,更多信息: MS Connect

  • CREATE USER 或 GROUP 语句 创建一个或更多的新用户或组。 语法 建立一个用户: CREATE USER 用户口令 pid [, 用户口令 pid, 匽 建立一个组: CREATE GROUP 组 pid[, 组 pid, 匽 CREATE INDEX 语句可分为以下几个部分: 部分 说明 用户 被加到工作组信息文件的用户名。 组 被加到工作组信息文件的组名。 口令 与特定用户名或

  • 我希望恢复创建表的原始脚本,因为表中的数据非常旧,但需要刷新创建的表。这个表是用数据库中另一个活动表中的数据创建的,所以如果有办法在不使用原始查询的情况下刷新它,我很乐意。欢迎任何解决方案! 谢谢