使用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']))
參考文檔: