Python透過Pymssql操作SQL Server
Why Pymssql
在Python的世界裡若要操作MS SQL Server資料庫,有兩大選擇方案:Pyodbc與Pymssql,為什麼首推Pymssql呢?因為若使用Pyodbc,顧名思義就是要安裝設定Pyodbc,除了不方便外,ODBC在Mac環境的設定非常複雜,而且Pyodbc的效能也不是特別的好,所以選用Pymssql最為簡單方便。
Pymssql官方網站:https://www.pymssql.org/
安裝Pymssql及相依性套件
開發環境
- OS:macOS Monterey 12.6
- IDS:Visual Studio Code
- Python 3.10
步驟1:使用brew安裝FreeTDS模組
$ brew install FreeTDS
步驟2:透過pip安裝pymssql套件
$ pip install pymssql==2.1.5
註:因為Mac環境有相容性問題,所以在Mac上,不論Intel或ARM,都要指定2.1.5版本。
以上兩個步驟就完成Pymssql的安裝工作了,可以開始寫程式囉!
連線到MS SQL Server
# 引入Pymssql包
import pymssql
# 宣告一個含有MS SQL Server連線參數的連線
sqlconn = pymssql.connect(server='Server Name', user='User ID', password='Change Me', database='Database Name')
# 開啟一個連線
cursor = sqlconn.cursor()
# ... Select / Insert / Update / Delete
# 關閉連線
sqlconn.close()
Select
# 引入Pymssql包
import pymssql
# 宣告一個含有MS SQL Server連線參數的連線
sqlconn = pymssql.connect(server='Server Name', user='User ID', password='Change Me', database='Database Name')
# 開啟一個連線
cursor = sqlconn.cursor()
# 宣告一個Quert String
querystr = "SELECT ROW0, ROW1, ROW2 FROM Tabel WHERE ROW3=%s"
# 執行Query String,並帶入參數
cursor.execute(querystr, "Parameter")
# 取得一行資料
row = cursor.fetchone()
while row:
print(str(row[0]) + " " + str(row[1]) + " " + str(row[2]))
row = cursor.fetchone()
# 關閉連線
sqlconn.close()
Insert / Update / Delete
# 引入Pymssql包
import pymssql
# 宣告一個含有MS SQL Server連線參數的連線
sqlconn = pymssql.connect(server='Server Name', user='User ID', password='Change Me', database='Database Name')
# 開啟一個連線
cursor = sqlconn.cursor()
# 宣告一個Quert String
querystr = "INSERT INTO Table (ROW0, ROW1, ROW2) VALUES(%s, %s, %s)"
# querystr = "UPDATE Table SET ROW0=%s, ROW1=%s, ROW2=%3"
# querystr = "DELETE FROM Table WHERE ROW0=%s"
# 執行Insert語法並帶入參數
cursor.execute(querystr, ("Parameter1", "Parameter2", "Parameter3"))
# 將資料Commit,才會真正寫到資料庫
sqlconn.commit()
# 關閉連線
sqlconn.close()
Rollback
# 引入Pymssql包
import pymssql
# 宣告一個含有MS SQL Server連線參數的連線
sqlconn = pymssql.connect(server='Server Name', user='User ID', password='Change Me', database='Database Name')
# 開啟一個連線
cursor = sqlconn.cursor()
# 宣告一個Quert String,內容是Begin Transaction
querystr1 = "BEGIN TRANSACTION"
# 宣告一個Quert String
querystr2 = "INSERT INTO Table (ROW0, ROW1, ROW2) VALUES(%s, %s, %s)"
# 執行Insert語法並帶入參數
cursor.execute(querystr2, ("Parameter1", "Parameter2", "Parameter3"))
# 執行Rollback
cursor.rollback()
# 關閉連線
sqlconn.close()
~ END ~