python pymssql 创建数据库

正常情况下写的代码:

conn = pymssql.connect(host='server', user="myname", password="123456?",database=DataBase_name)
cursor = conn.cursor()  # 创建游标
sql = "CREATE DATABASE  Table_name"
cursor.execute(sql)
conn.commit()
conn.close()

按照正常的逻辑进行数据库的连接报错:

pymssql.OperationalError: (226, b'CREATE DATABASE statement not allowed within multi-statement transaction.DB-Lib error message 20018, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n')

原因及解决方案:
pymssql库规定对database 的操作必须是在autocommit为Ture时进行。也就是在execute时就会立即向数据库发出操作请求,而不是等待运行到commit()时再一起执行。
这样做的目的是为了保证对Table的新建/删除/插入数据等操作,其位置定位是准确的,也就是说在执行Table操作时整个数据库系统里的所有database名称都是固定的,不存在不确定的情况。

解决方案:

conn = pymssql.connect(host='server', user="myname", password="123456?")
cursor = conn.cursor()  # 创建游标
conn.autocommit(True)   #指令立即执行,无需等待conn.commit()
sql = "CREATE DATABASE DataBase_name "
cursor.execute(sql)
conn.autocommit(False) #指令关闭立即执行,以后还是等待conn.commit()时再统一执行
conn.close()

参考资源来源:大佬
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章