欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中使用pymssql庫操作MSSQL數據庫

 更新時間:2023年08月21日 10:34:50   作者:鐵松溜達py  
這篇文章主要給大家介紹了關于python中使用pymssql庫操作MSSQL數據庫的相關資料,最近在學習python,發(fā)現好像沒有對pymssql的詳細說明,于是乎把官方文檔學習一遍,重要部分做個歸檔,方便以后查閱,需要的朋友可以參考下

前言

在Python中,pymssql是一個用于與Microsoft SQL Server數據庫進行交互的第三方庫。pymssql提供了連接到數據庫、執(zhí)行SQL查詢、插入、更新和刪除數據等功能。下面我將詳細介紹如何使用pymssql進行MSSQL數據庫操作。

安裝pymssql庫 首先,確保你的Python環(huán)境已經安裝了pymssql庫。你可以使用pip工具進行安裝

pip install pymssql

插入、更新和刪除數據

使用pymssql庫,你可以執(zhí)行插入、更新和刪除數據的操作。 

import pymssql

# 連接參數
server = 'server_name'
database = 'database_name'
username = 'username'
password = 'password'

# 建立連接
conn = pymssql.connect(server=server, database=database, user=username, password=password)

# 創(chuàng)建游標對象
cursor = conn.cursor()

# 執(zhí)行SQL查詢
cursor.execute("SELECT * FROM your_table")

# 獲取查詢結果
result = cursor.fetchall()

# 遍歷結果
for row in result:
    print(row)

# 插入數據
insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
insert_data = ('value1', 'value2')
cursor.execute(insert_query, insert_data)

# 更新數據
update_query = "UPDATE your_table SET column1 = %s WHERE id = %s"
update_data = ('new_value', 1)
cursor.execute(update_query, update_data) #參數化查詢

# 刪除數據
delete_query = "DELETE FROM your_table WHERE id = %s"
delete_data = (1,)
cursor.execute(delete_query, delete_data)

# 提交事務
conn.commit()

# 關閉游標
cursor.close()

管理事務

以確保一組數據庫操作要么全部成功,要么全部回滾。 

# 創(chuàng)建游標對象
cursor = conn.cursor()
try:
    # 開始事務
    conn.begin()
    # 執(zhí)行數據庫操作
    cursor.execute("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")
    cursor.execute("UPDATE your_table SET column1 = 'new_value' WHERE id = 1")
    # 提交事務
    conn.commit()
except Exception as e:
    # 回滾事務
    conn.rollback()
    print("Error:", e)
# 關閉游標
cursor.close()

查詢結果處理

# pymssql返回的查詢結果是一個元組列表,其中每個元組表示一行數據。你可以通過遍歷查詢結果來逐行處理數據。 

# 查詢結果處理
# pymssql返回的查詢結果是一個元組列表,其中每個元組表示一行數據。你可以通過遍歷查詢結果來逐行處理數據。
# 創(chuàng)建游標對象
cursor = conn.cursor()
# 執(zhí)行查詢
cursor.execute("SELECT column1, column2 FROM your_table")
# 獲取查詢結果
result = cursor.fetchall()
# 遍歷結果
for row in result:
    column1_value = row[0]
    column2_value = row[1]
    # 處理數據
# 關閉游標
cursor.close()

處理大型結果集

如果查詢結果集非常大,無法一次性全部加載到內存中,可以使用pymssql提供的fetchone()fetchmany()方法來逐步獲取結果集的數據。

# 創(chuàng)建游標對象
cursor = conn.cursor()
# 執(zhí)行查詢
cursor.execute("SELECT column1, column2 FROM your_table")
# 獲取一條記錄
row = cursor.fetchone()
while row:
    # 處理數據
    print(row)
    # 獲取下一條記錄
    row = cursor.fetchone()
# 關閉游標
cursor.close()

批量插入數據

# 如果你需要插入大量數據到數據庫,一次插入一行可能效率較低。pymssql允許你使用executemany()方法進行批量插入,一次插入多行數據。

# 批量插入數據
# 如果你需要插入大量數據到數據庫,一次插入一行可能效率較低。pymssql允許你使用executemany()方法進行批量插入,一次插入多行數據。
# 創(chuàng)建游標對象
cursor = conn.cursor()
# 準備插入數據
data = [('value1', 'value2'),
        ('value3', 'value4'),
        ('value5', 'value6')]
# 執(zhí)行批量插入
insert_query = "INSERT INTO your_table (column1, column2) VALUES (%s, %s)"
cursor.executemany(insert_query, data)
# 提交事務
conn.commit()
# 關閉游標
cursor.close()

存儲過程調用

# pymssql也支持調用MSSQL數據庫中的存儲過程。你可以使用execute_proc()方法來執(zhí)行存儲過程。

# 存儲過程調用
# pymssql也支持調用MSSQL數據庫中的存儲過程。你可以使用execute_proc()方法來執(zhí)行存儲過程。
# 創(chuàng)建游標對象
cursor = conn.cursor()
# 執(zhí)行存儲過程
cursor.execute_proc('your_stored_procedure_name', ('param1', 'param2'))
# 獲取結果
result = cursor.fetchall()
# 關閉游標
cursor.close()

分頁查詢

當處理大量數據時,分頁查詢是一種常見的需求。可以使用pymssql的OFFSETFETCH語句來實現分頁查詢。通過調整page_sizepage_number參數,可以獲取指定頁數的數據。

# 定義分頁參數
page_size = 10
page_number = 1
# 執(zhí)行分頁查詢
query = f"SELECT column1, column2 FROM your_table ORDER BY column1 OFFSET {page_size * (page_number - 1)} ROWS FETCH NEXT {page_size} ROWS ONLY"
cursor.execute(query)
result = cursor.fetchall()
for row in result:
    # 處理數據
# 創(chuàng)建游標對象
cursor = conn.cursor()
# 定義分頁查詢語句
page_size = 10  # 每頁的記錄數
page_number = 1  # 頁碼
offset = (page_number - 1) * page_size  # 計算偏移量
query = f"SELECT column1, column2 FROM your_table ORDER BY column1 OFFSET {offset} ROWS FETCH NEXT {page_size} ROWS ONLY"
# 執(zhí)行分頁查詢
cursor.execute(query)
# 處理查詢結果
result = cursor.fetchall()
for row in result:
    # 處理數據
# 關閉游標
cursor.close()

處理數據庫連接錯誤

在連接數據庫時,可能會遇到連接錯誤。可以通過捕獲pymssql庫引發(fā)的pymssql.OperationalError異常來處理連接錯誤。 

import pymssql
try:
    conn = pymssql.connect(server='server_name', database='database_name', user='username', password='password')
    # 連接成功,執(zhí)行數據庫操作
    cursor = conn.cursor()
    # 執(zhí)行查詢、插入、更新等操作
    # ...
    conn.commit()
    cursor.close()
    conn.close()
except pymssql.OperationalError as e:
    # 處理連接錯誤
    print("Connection Error:", e)
import pymssql
try:
    # 連接數據庫
    conn = pymssql.connect(server='server_name', database='database_name', user='username', password='password')
    # 執(zhí)行數據庫操作
    cursor = conn.cursor()
    cursor.execute("SELECT column1, column2 FROM your_table")
    result = cursor.fetchall()
    # 處理查詢結果
    for row in result:
        # 處理數據
except pymssql.Error as e:
    print("Database Error:", e)
finally:
    # 關閉連接
    if conn:
        conn.close()

獲取查詢結果的列信息

如果你需要獲取查詢結果的列信息,如列名、數據類型等,可以使用cursor.description屬性。

# 創(chuàng)建游標對象
cursor = conn.cursor()
# 執(zhí)行查詢
cursor.execute("SELECT column1, column2 FROM your_table")
# 獲取列名
column_names = [column[0] for column in cursor.description]
# 獲取列類型
column_types = [column[1] for column in cursor.description]
# 處理查詢結果
result = cursor.fetchall()
for row in result:
    for name, value in zip(column_names, row):
        print(f"{name}: {value}")
# 關閉游標
cursor.close()

處理查詢結果中的NULL值

在查詢結果中,某些列的值可能為NULL。pymssql將NULL值表示為Python中的None。你可以使用條件語句來處理查詢結果中的NULL值。

cursor.execute("SELECT column1, column2 FROM your_table")
result = cursor.fetchall()
for row in result:
    column1_value = row[0] if row[0] is not None else 'N/A'
    column2_value = row[1] if row[1] is not None else 'N/A'
    # 處理數據

執(zhí)行存儲過程并獲取輸出參數

如果你需要執(zhí)行MSSQL數據庫中的存儲過程,并獲取輸出參數的值,可以使用pymssql提供的callproc()方法。使用callproc()方法執(zhí)行名為your_stored_procedure_name的存儲過程,并傳遞參數param1param2。然后,可以使用getoutputparams()方法獲取輸出參數的值。

# 創(chuàng)建游標對象
cursor = conn.cursor()
# 執(zhí)行存儲過程
cursor.callproc('your_stored_procedure_name', (param1, param2))
# 獲取輸出參數的值
output_param1 = cursor.getoutputparams()[0]
output_param2 = cursor.getoutputparams()[1]
# 關閉游標
cursor.close()

批量更新數據

如果你需要批量更新數據庫中的數據,可以使用pymssql的executemany()方法。

# 創(chuàng)建游標對象
cursor = conn.cursor()
# 定義更新語句和數據
update_query = "UPDATE your_table SET column1 = %s WHERE id = %s"
data = [('new_value1', 1), ('new_value2', 2), ('new_value3', 3)]
# 執(zhí)行批量更新
cursor.executemany(update_query, data)
# 提交事務
conn.commit()
# 關閉游標
cursor.close()

使用with語句自動管理連接和事務

使用with語句可以更方便地管理數據庫連接和事務,確保資源的正確釋放和事務的提交或回滾。

# 使用with語句管理連接和事務
with pymssql.connect(server='server_name', database='database_name', user='username', password='password') as conn:
    # 創(chuàng)建游標對象
    cursor = conn.cursor()
    try:
        # 執(zhí)行數據庫操作
        cursor.execute("INSERT INTO your_table (column1, column2) VALUES ('value1', 'value2')")
        cursor.execute("UPDATE your_table SET column1 = 'new_value' WHERE id = 1")
        # 提交事務
        conn.commit()
    except Exception as e:
        # 回滾事務
        conn.rollback()
        print("Error:", e)
    # 關閉游標
    cursor.close()

異步操作

如果你需要執(zhí)行異步的MSSQL數據庫操作,pymssql提供了對異步IO的支持。可以使用pymssql.connect()asynchronous=True參數來創(chuàng)建異步連接,以及cursor.execute()as_dict=True參數來執(zhí)行異步查詢并返回字典格式的結果。使用asyncio模塊創(chuàng)建了一個異步的主函數main(),在其中創(chuàng)建了異步連接和游標,并執(zhí)行了異步查詢。最后,我們使用事件循環(huán)運行異步任務。

import asyncio
import pymssql
async def main():
    # 創(chuàng)建異步連接
    conn = await pymssql.connect(server='server_name', database='database_name', user='username', password='password', asynchronous=True)
    # 創(chuàng)建異步游標
    cursor = conn.cursor(as_dict=True)
    # 執(zhí)行異步查詢
    await cursor.execute("SELECT * FROM your_table")
    # 獲取結果
    result = await cursor.fetchall()
    # 處理查詢結果
    for row in result:
        # 處理數據
    # 關閉游標和連接
    await cursor.close()
    await conn.close()
# 創(chuàng)建事件循環(huán)并運行異步任務
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

使用連接池

連接池是一種用于管理數據庫連接的技術,它可以提高應用程序的性能和可擴展性。pymssql支持使用連接池來管理數據庫連接。使用連接池可以減少連接的創(chuàng)建和銷毀開銷,并提供連接的復用,從而提高應用程序的性能和可擴展性。

from pymssql import pool
# 創(chuàng)建連接池
pool = pool.ConnectionPool(server='server_name', database='database_name', user='username', password='password', max_connections=5)
# 從連接池獲取連接
conn = pool.get_connection()
# 執(zhí)行數據庫操作
cursor = conn.cursor()
cursor.execute("SELECT * FROM your_table")
result = cursor.fetchall()
# 處理查詢結果
for row in result:
    # 處理數據
# 關閉游標和連接
cursor.close()
conn.close()

總結 

到此這篇關于python中使用pymssql庫操作MSSQL數據庫的文章就介紹到這了,更多相關python pymssql操作MSSQL內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python列表生成式與生成器操作示例

    Python列表生成式與生成器操作示例

    這篇文章主要介紹了Python列表生成式與生成器操作,結合實例形式分析了Python列表生成式與生成器的功能、使用方法及相關操作技巧,需要的朋友可以參考下
    2018-08-08
  • 使用Python和Flask編寫一個留言簿

    使用Python和Flask編寫一個留言簿

    本文將通過創(chuàng)建一個簡單的留言簿應用來入門Flask,這個項目可以幫助我們理解Flask的基本概念和功能,如路由、模板、表單處理等,感興趣的可以了解下
    2024-12-12
  • python Django里CSRF 對應策略詳解

    python Django里CSRF 對應策略詳解

    這篇文章主要介紹了python Django里CSRF 對應策略詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • python3之Splash的具體使用

    python3之Splash的具體使用

    Splash是一個javascript渲染服務。本文主要介紹了python3之Splash的具體使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python 命令行非阻塞輸入的小例子

    Python 命令行非阻塞輸入的小例子

    很久很久以前,系windows平臺下,用C語言寫過一款貪食蛇游戲,cmd界面,用kbhit()函數實現非阻塞輸入。系windows平臺下用python依然可以調用msvcrt.khbit實現非阻塞監(jiān)聽。但系喺linux下面就冇呢支歌仔唱
    2013-09-09
  • Python如何利用struct進行二進制文件或數據流

    Python如何利用struct進行二進制文件或數據流

    這篇文章主要介紹了Python如何利用struct進行二進制文件或數據流問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Python&Matlab實現灰狼優(yōu)化算法的示例代碼

    Python&Matlab實現灰狼優(yōu)化算法的示例代碼

    灰狼優(yōu)化算法是一種群智能優(yōu)化算法,它的獨特之處在于一小部分擁有絕對話語權的灰狼帶領一群灰狼向獵物前進。本文具體介紹了灰狼優(yōu)化算法的兩種實現示例代碼,需要的可以參考一下
    2022-03-03
  • opencv-python 提取sift特征并匹配的實例

    opencv-python 提取sift特征并匹配的實例

    今天小編就為大家分享一篇opencv-python 提取sift特征并匹配的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python3?Loguru輸出日志工具的使用

    Python3?Loguru輸出日志工具的使用

    使用 Python 來寫程序或者腳本的話,常常遇到的問題就是需要對日志進行刪除。一方面可以幫助我們在程序出問題的時候排除問題,二來可以幫助我們記錄需要關注的信息,這篇文章主要介紹了Python3?Loguru?相見恨晚的輸出日志工具,需要的朋友可以參考下
    2022-05-05
  • 讓你相見恨晚的十個Python騷操作

    讓你相見恨晚的十個Python騷操作

    這篇文章主要給大家介紹了十個讓你相見恨晚的Python騷操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論