Python操作SQLServer

最老程式設計師閆濤發表於2018-08-28

安裝開發環境

要進行SQLServer的開發,首先需要在本機上安裝SQLServer,建立本機開發環境。可以從微軟官網上下載類似cn_sql_server_2012_enterprise_edition_with_sp1_x86_x64_dvd_1234493.iso檔案,可以直接雙擊安裝,安裝過程極為複雜,對於習慣mysql的使用者來說可以說是難以想象。歷盡千辛苦安裝之後,就可以啟動SQL Server Management Studio來進行資料庫管理了。

安裝所需庫

用python操作SQLServer資料庫,需要安裝pymssql庫。直接使用pip install pymssql會提示需要visual studio 2014 build tools,而且只能是這個版本,高版本的都不行。所以最簡單的方法是下載whl檔案,直接安裝。
到python庫網站:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql,找到自己平臺對應的檔案,下載到本地任意一個目錄,以我的為例為pymssql‑2.1.4.dev5‑cp36‑cp36m‑win_amd64.whl,在該目錄下執行如下命令:
pip install pymssql‑2.1.4.dev5‑cp36‑cp36m‑win_amd64.whl
安裝成功後,可以直接刪除pymssql‑2.1.4.dev5‑cp36‑cp36m‑win_amd64.whl檔案,因為python已經將其拷貝到系統庫檔案目錄下了。

建立資料庫

首先將線上資料庫備份為bak檔案,下載到本機上來。
在SQL Server Management Studio中,在左側選單欄中選擇“資料庫”,點選右鍵選反擇“還原資料庫”,進行如下圖所示操作:
這裡寫圖片描述
選擇確定就可以在本地建立一個完整的資料庫了。
在SQLServer Management Studio中,建立一個新資料庫連線,輸入新建資料庫使用者名稱和密碼,如果可以成功連線,則開發環境就準備成功了。

資料庫操作

對於資料庫操作,首先需要建立資料庫連線,然後是執行增刪改查操作,我們這裡僅以建立資料庫連線和傳送一條簡單的查詢請求為例。首先是建立資料庫連線,程式碼如下所示:

import pymssql

def get_connection():
    conn = pymssql.connect(server='SKY-20180726HXA', 
                user='dbo_lejiao', password='123456', database='app_hw_read')
    return conn

def close_connection(conn):
    conn.close()

資料庫連線建立好之後,就可以進行增刪改查操作了,這裡以查詢為例,並在SQL語句中有兩個引數,採用SQL預編譯方式,這樣就不用考慮SQL隱碼攻擊的問題了,程式碼如下所示:

def execute_query(sql, params):
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute(sql, params)
    rows = cursor.fetchall()
    return rows

如上所示,SQLServer採用遊標來執行SQL語句,在執行SQL語句時,可以指定引數的值params,params的型別為元組,如果是一次性執行多條語句,例如一次性插入100條記錄,可以將100條記錄的引數作為元組陣列形式傳入,如下所示:

cursor.executemany(
    "INSERT INTO persons VALUES (%d, %s, %s)",
    [(1, 'John Smith', 'John Doe'),
     (2, 'Jane Doe', 'Joe Dog'),
     (3, 'Mike T.', 'Sarah H.')])

呼叫程式碼如下所示:

import model.m_mssql as db

if __name__ == '__main__':
    args = {}
    print('Microsoft SQLServer')
    conn = db.get_connection()
    print(conn)
    sql = 'select resid, resindex, remark from dbo.Res_warn where resindex=%d or resindex=%d'
    index1 = 0
    index2 = 3
    params = (index1, index2)
    rows = db.execute_query(sql, params)
    for row in rows:
        print('#### {0}--{1}--{2}'.format(row[0], row[1], row[2]))
    db.close_connection(conn)
    print('mssql is ok')

其中model/m_mssql.py檔案中的內容為上面我們列出的程式碼。

相關文章