最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python中使用pymssql庫操作MSSQL數(shù)據(jù)庫

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

前言

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

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

pip install pymssql

插入、更新和刪除數(shù)據(jù)

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

import pymssql

# 連接參數(shù)
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")

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

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

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

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

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

# 提交事務(wù)
conn.commit()

# 關(guān)閉游標
cursor.close()

管理事務(wù)

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

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

查詢結(jié)果處理

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

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

處理大型結(jié)果集

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

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

批量插入數(shù)據(jù)

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

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

存儲過程調(diào)用

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

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

分頁查詢

當(dāng)處理大量數(shù)據(jù)時,分頁查詢是一種常見的需求??梢允褂胮ymssql的OFFSETFETCH語句來實現(xiàn)分頁查詢。通過調(diào)整page_sizepage_number參數(shù),可以獲取指定頁數(shù)的數(shù)據(jù)。

# 定義分頁參數(shù)
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:
    # 處理數(shù)據(jù)
# 創(chuàng)建游標對象
cursor = conn.cursor()
# 定義分頁查詢語句
page_size = 10  # 每頁的記錄數(shù)
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)
# 處理查詢結(jié)果
result = cursor.fetchall()
for row in result:
    # 處理數(shù)據(jù)
# 關(guān)閉游標
cursor.close()

處理數(shù)據(jù)庫連接錯誤

在連接數(shù)據(jù)庫時,可能會遇到連接錯誤??梢酝ㄟ^捕獲pymssql庫引發(fā)的pymssql.OperationalError異常來處理連接錯誤。 

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

獲取查詢結(jié)果的列信息

如果你需要獲取查詢結(jié)果的列信息,如列名、數(shù)據(jù)類型等,可以使用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]
# 處理查詢結(jié)果
result = cursor.fetchall()
for row in result:
    for name, value in zip(column_names, row):
        print(f"{name}: {value}")
# 關(guān)閉游標
cursor.close()

處理查詢結(jié)果中的NULL值

在查詢結(jié)果中,某些列的值可能為NULL。pymssql將NULL值表示為Python中的None。你可以使用條件語句來處理查詢結(jié)果中的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'
    # 處理數(shù)據(jù)

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

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

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

批量更新數(shù)據(jù)

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

# 創(chuàng)建游標對象
cursor = conn.cursor()
# 定義更新語句和數(shù)據(jù)
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)
# 提交事務(wù)
conn.commit()
# 關(guān)閉游標
cursor.close()

使用with語句自動管理連接和事務(wù)

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

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

異步操作

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

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")
    # 獲取結(jié)果
    result = await cursor.fetchall()
    # 處理查詢結(jié)果
    for row in result:
        # 處理數(shù)據(jù)
    # 關(guān)閉游標和連接
    await cursor.close()
    await conn.close()
# 創(chuàng)建事件循環(huán)并運行異步任務(wù)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())

使用連接池

連接池是一種用于管理數(shù)據(jù)庫連接的技術(shù),它可以提高應(yīng)用程序的性能和可擴展性。pymssql支持使用連接池來管理數(shù)據(jù)庫連接。使用連接池可以減少連接的創(chuàng)建和銷毀開銷,并提供連接的復(fù)用,從而提高應(yī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í)行數(shù)據(jù)庫操作
cursor = conn.cursor()
cursor.execute("SELECT * FROM your_table")
result = cursor.fetchall()
# 處理查詢結(jié)果
for row in result:
    # 處理數(shù)據(jù)
# 關(guān)閉游標和連接
cursor.close()
conn.close()

總結(jié) 

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

相關(guān)文章

  • Python2實現(xiàn)的LED大數(shù)字顯示效果示例

    Python2實現(xiàn)的LED大數(shù)字顯示效果示例

    這篇文章主要介紹了Python2實現(xiàn)的LED大數(shù)字顯示效果,涉及Python的簡單交互與列表相關(guān)使用技巧,需要的朋友可以參考下
    2017-09-09
  • 如何用python繪制雷達圖

    如何用python繪制雷達圖

    這篇文章主要介紹了如何用python繪制雷達圖,幫助大家更好的利用python進行數(shù)據(jù)分析,感興趣的朋友可以了解下
    2021-04-04
  • python使用pywinauto驅(qū)動微信客戶端實現(xiàn)公眾號爬蟲

    python使用pywinauto驅(qū)動微信客戶端實現(xiàn)公眾號爬蟲

    這個項目是通過pywinauto控制windows(win10)上的微信PC客戶端來實現(xiàn)公眾號文章的抓取。代碼分成server和client兩部分。server接收client抓取的微信公眾號文章,并且保存到數(shù)據(jù)庫。另外server支持簡單的搜索和導(dǎo)出功能。client通過pywinauto實現(xiàn)微信公眾號文章的抓取。
    2021-05-05
  • Python?存根文件(.pyi)簡介與實戰(zhàn)案例及類型提示的高級指南

    Python?存根文件(.pyi)簡介與實戰(zhàn)案例及類型提示的高級指南

    存根文件(.pyi) 是Python用于定義接口類型但不包含具體實現(xiàn)的特殊文件,它提供了一種獨立于實現(xiàn)的類型定義方式,這篇文章給大家介紹Python存根文件(.pyi)簡介與實戰(zhàn)案例及類型提示的高級指南,感興趣的朋友一起看看吧
    2025-08-08
  • python操作xlsx格式文件并讀取

    python操作xlsx格式文件并讀取

    python操作xlsx格式文件是比較常見的一個問題,本文給大家介紹xlrd庫讀取,pandas庫讀取的實例代碼,給大家講解的很詳細,需要的朋友跟隨小編一起看看吧
    2021-06-06
  • OpenCV實現(xiàn)灰度、高斯模糊、邊緣檢測的示例

    OpenCV實現(xiàn)灰度、高斯模糊、邊緣檢測的示例

    這篇文章主要介紹了OpenCV實現(xiàn)灰度、高斯模糊、邊緣檢測的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • PyOD進行異常值檢測使用實例

    PyOD進行異常值檢測使用實例

    異常值檢測各個領(lǐng)域的關(guān)鍵任務(wù)之一,PyOD是Python Outlier Detection的縮寫,可以簡化多變量數(shù)據(jù)集中識別異常值的過程,在本文中,我們將介紹PyOD包,并通過實際給出詳細的代碼示例
    2024-02-02
  • python設(shè)置隨機種子實例講解

    python設(shè)置隨機種子實例講解

    在本篇文章里小編給大家整理的是關(guān)于python設(shè)置隨機種子的相關(guān)知識點以及實例內(nèi)容,需要的朋友們學(xué)習(xí)下。
    2019-09-09
  • python把一個字符串切開的實例方法

    python把一個字符串切開的實例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python把一個字符串切開的實例方法,需要的朋友們可以學(xué)習(xí)參考下。
    2020-09-09
  • 用Python獲取亞馬遜商品信息

    用Python獲取亞馬遜商品信息

    大家好,本篇文章主要講的是用Python獲取亞馬遜商品信息,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01

最新評論

桐梓县| 绥中县| 青海省| 乐昌市| 福安市| 大渡口区| 若尔盖县| 纳雍县| 台江县| 霸州市| 前郭尔| 大姚县| 丰县| 凉山| 正宁县| 乐业县| 阜平县| 金门县| 靖远县| 东方市| 津南区| 明溪县| 鄂托克前旗| 茌平县| 汉中市| 永定县| 项城市| 永靖县| 福海县| 铁力市| 彭山县| 疏附县| 萨嘎县| 永福县| 阳信县| 连云港市| 乐至县| 石景山区| 巨鹿县| 军事| 云霄县|