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()

參考資源來源:大佬
在這裏插入圖片描述

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