使用pymssql模塊操作SQL Server數據庫
一,連接數據庫
使用pymssql連接SQL Server數據庫,首先創建連接和游標:
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,執行查詢
使用游標執行SQL語句
cursor.execute(
"
sql statement
"
)
3,提交事務
當執行更新操作時,需要顯式調用 commit()函數來提交事務:
conn.commit()
如果事務執行失敗,可以回滾事務:
conn.rollback()
4,關閉連接,釋放資源
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型數據
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

