Python 學習 第十八篇:使用pymssql操做SQL Server數據庫

使用pymssql模塊操做SQL Server數據庫html

一,鏈接數據庫

使用pymssql鏈接SQL Server數據庫,首先建立鏈接和遊標:sql

import pymssql

conn = pymssql.connect(host='host',user='user',password='pwd',database='db_name')
cursor = conn.cursor() 

1,行的格式數據庫

當執行select語句獲取數據時,返回的數據行有兩種格式:元組和字典,行的默認格式是元組。pymssql返回的數據集的格式是在建立遊標時設置的,當參數 as_dict爲True時,返回的行是字典格式,該參數的默認值是False,所以,默認的行格式是元組。函數

cursor = conn.cursor(as_dict=True) 

2,執行查詢fetch

使用遊標執行SQL語句spa

cursor.execute("sql statement") 

3,提交事務code

當執行更新操做時,須要顯式調用 commit()函數來提交事務:server

conn.commit()

若是事務執行失敗,能夠回滾事務:htm

conn.rollback()

4,關閉鏈接,釋放資源blog

conn.close()

二,更新數據

對數據庫有查詢,更新和新增操做,在更新和插入數據時,須要顯式提交事務。當須要更新數據時,調用遊標的execute()函數執行SQL命令來實現:

Cursor.execute(operation)
Cursor.execute(operation, params)

若是要在一個事務中執行多條SQL命令,能夠調用遊標的executemany()函數:

Cursor.executemany(operation, params_seq)

1,執行數據更新和刪除

經過遊標的execute()函數來執行TSQL語句,調用 commit() 來提交事務

cursor.execute("""
sql statement
""")  

conn.commit()

2,執行數據的多行插入

若是須要插入多條記錄,能夠使用遊標的executemany()函數,該函數包含模板SQL 命令和一個格式化的參數列表,用於在一條事務中插入多條記錄:

args=[(1, 'John Smith', 'John Doe'),
     (2, 'Jane Doe', 'Joe Dog'),
     (3, 'Mike T.', 'Sarah H.')]

cursor.executemany("INSERT INTO persons VALUES (%d, %s, %s)", args )
conn.commit()

三,遍歷數據

當從SQL Server數據庫中獲取數據時,能夠使用fetchone()從結果集中提取一條記錄,使用fetchmany()從結果集中提取多條記錄,或使用fetchall()提取所有結果集:

cursor.fetchone()           # return a row (a tuple or a dict) if as_dict was passed to pymssql.connect()
cursor.fetchmany(size=None) # return a list of tuples or dicts if as_dict was passed to pymssql.connect() 
cursor.fetchall()           # return a list of tuples or dicts if as_dict was passed to pymssql.connect()

因爲遊標是一個迭代器,所以,能夠使用for語句以迭代方式逐行處理查詢的結果集。

for row in cursor:

1,以元組方式遍歷數據

返回的結果集中,每一行都是一個元組:

cursor=connect.cursor()
cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
for row in cursor:
    print('row = %r' % (row,))

2,以字典方式遍歷數據

返回的結果集,每一行是一個字典結構:

 cursor = conn.cursor(as_dict=True)
 cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
 for row in cursor:
     print("ID=%d, Name=%s" % (row['id'], row['name']))

四,關閉鏈接

在一個鏈接中,能夠提交多個事務,當查詢完成以後,必定要關閉鏈接:

conn.close()

一般狀況下,使用with來自動關閉鏈接:

import pymssql 
 
with pymssql.connect(server, user, password, "db_name") as conn:
    with conn.cursor(as_dict=True) as cursor:  
        cursor.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')
        for row in cursor:
            print("ID=%d, Name=%s" % (row['id'], row['name']))

 

參考文檔:

pymssql reference

Python中從SQL型數據庫讀寫dataframe型數據

相關文章
相關標籤/搜索