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

Python實現(xiàn)調(diào)用MySQL數(shù)據(jù)庫的存儲過程

 更新時間:2026年01月09日 08:44:37   作者:三維空間  
這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)調(diào)用MySQL數(shù)據(jù)庫的存儲過程,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

一、準(zhǔn)備工作

首先需要安裝 Python 操作 MySQL 的庫,最常用的是 mysql-connector-python(官方庫)或 pymysql,這里以官方庫為例:

pip install mysql-connector-python

二、完整實現(xiàn)步驟

1. 先在 MySQL 中創(chuàng)建測試存儲過程

首先我們需要一個可測試的存儲過程,比如創(chuàng)建一個根據(jù)用戶 ID 查詢用戶信息的存儲過程:

-- 先創(chuàng)建測試表(可選)
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT,
    email VARCHAR(100)
);

-- 插入測試數(shù)據(jù)
INSERT INTO users (name, age, email) VALUES 
('張三', 25, 'zhangsan@test.com'),
('李四', 30, 'lisi@test.com');

-- 創(chuàng)建存儲過程:根據(jù)ID查詢用戶信息
DELIMITER //  -- 臨時修改語句結(jié)束符為//,避免與存儲過程內(nèi)的;沖突
CREATE PROCEDURE get_user_by_id(IN user_id INT, OUT user_name VARCHAR(50), OUT user_age INT)
BEGIN
    SELECT name, age INTO user_name, user_age FROM users WHERE id = user_id;
END //
DELIMITER ;  -- 恢復(fù)語句結(jié)束符為;

-- 另一個測試存儲過程:無參數(shù),查詢所有用戶
CREATE PROCEDURE get_all_users()
BEGIN
    SELECT * FROM users;
END;

2. Python 調(diào)用存儲過程的代碼實現(xiàn)

下面是 Python 調(diào)用存儲過程的完整代碼,包含兩種常見場景:帶輸入/輸出參數(shù)的存儲過程無參數(shù)的存儲過程

import mysql.connector
from mysql.connector import Error

def call_mysql_procedure():
    # 數(shù)據(jù)庫連接配置
    config = {
        'host': 'localhost',       # 數(shù)據(jù)庫地址
        'user': 'root',            # 用戶名
        'password': '你的數(shù)據(jù)庫密碼', # 密碼
        'database': 'test_db'      # 數(shù)據(jù)庫名(替換為你的庫名)
    }

    connection = None
    try:
        # 1. 建立數(shù)據(jù)庫連接
        connection = mysql.connector.connect(**config)
        if connection.is_connected():
            cursor = connection.cursor()

            # ========== 場景1:調(diào)用帶輸入/輸出參數(shù)的存儲過程 ==========
            # 定義輸入?yún)?shù)和輸出參數(shù)
            user_id = 1  # 輸入?yún)?shù)
            user_name = None  # 輸出參數(shù)(初始化為None)
            user_age = None   # 輸出參數(shù)(初始化為None)

            # 調(diào)用存儲過程:callproc(存儲過程名, (參數(shù)列表))
            cursor.callproc('get_user_by_id', (user_id, user_name, user_age))

            # 獲取輸出參數(shù)(存儲過程執(zhí)行后,參數(shù)會被更新,存在cursor.stored_results()中)
            for result in cursor.stored_results():
                # 或者直接通過 cursor.outputs 獲取(不同版本可能略有差異)
                output_params = result.fetchone()
                if output_params:
                    user_name, user_age = output_params
            print(f"場景1 - 查詢ID為{user_id}的用戶:")
            print(f"姓名:{user_name},年齡:{user_age}\n")

            # ========== 場景2:調(diào)用無參數(shù)的存儲過程(返回結(jié)果集) ==========
            print("場景2 - 查詢所有用戶:")
            cursor.callproc('get_all_users')  # 無參數(shù),傳入空元組或省略
            # 遍歷結(jié)果集
            for result in cursor.stored_results():
                users = result.fetchall()  # 獲取所有結(jié)果
                # 打印表頭
                columns = [desc[0] for desc in result.description]
                print("\t".join(columns))
                # 打印數(shù)據(jù)
                for user in users:
                    print("\t".join(str(col) for col in user))

            # 提交事務(wù)(如果存儲過程有修改操作,必須提交)
            connection.commit()

    except Error as e:
        print(f"數(shù)據(jù)庫操作出錯:{e}")
        # 出錯時回滾事務(wù)
        if connection:
            connection.rollback()
    finally:
        # 關(guān)閉游標(biāo)和連接
        if connection and connection.is_connected():
            if cursor:
                cursor.close()
            connection.close()
            print("\n數(shù)據(jù)庫連接已關(guān)閉")

if __name__ == "__main__":
    call_mysql_procedure()

三、關(guān)鍵代碼解釋

1.連接數(shù)據(jù)庫:通過 mysql.connector.connect() 傳入配置參數(shù)建立連接,注意替換為你的數(shù)據(jù)庫地址、用戶名、密碼和庫名。

2.調(diào)用存儲過程核心方法cursor.callproc(proc_name, params)

  • proc_name:存儲過程名稱(字符串)。
  • params:參數(shù)列表(元組),順序需與存儲過程的參數(shù)(IN/OUT/INOUT)一一對應(yīng)。

3.獲取輸出參數(shù)/結(jié)果集

  • 帶輸出參數(shù)的存儲過程:執(zhí)行 callproc 后,通過 cursor.stored_results() 遍歷結(jié)果,獲取輸出參數(shù)的值。
  • 返回結(jié)果集的存儲過程:同樣通過 cursor.stored_results() 獲取結(jié)果集,再用 fetchone()/fetchall() 讀取數(shù)據(jù)。

4.事務(wù)處理:如果存儲過程包含插入/更新/刪除操作,必須調(diào)用 connection.commit() 提交事務(wù);出錯時用 connection.rollback() 回滾。

5.資源釋放:最后必須關(guān)閉游標(biāo)和連接,避免資源泄漏。

到此這篇關(guān)于Python實現(xiàn)調(diào)用MySQL數(shù)據(jù)庫的存儲過程的文章就介紹到這了,更多相關(guān)Python調(diào)用MySQL存儲過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python+selenium實現(xiàn)簡歷自動刷新的示例代碼

    python+selenium實現(xiàn)簡歷自動刷新的示例代碼

    這篇文章主要介紹了python+selenium實現(xiàn)簡歷自動刷新的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python使用Scrapy抓取和解析網(wǎng)頁數(shù)據(jù)的方法

    Python使用Scrapy抓取和解析網(wǎng)頁數(shù)據(jù)的方法

    很多 Python 初學(xué)者學(xué)完基礎(chǔ)語法后,都會遇到一個很實際的問題:怎么把網(wǎng)頁里的數(shù)據(jù)穩(wěn)定地提取下來,變成自己能處理的結(jié)構(gòu)化數(shù)據(jù),Scrapy 是 Python 生態(tài)里非常經(jīng)典的爬蟲框架,本文給大家介紹了Python使用Scrapy抓取和解析網(wǎng)頁數(shù)據(jù)的方法,需要的朋友可以參考下
    2026-05-05
  • 解決python3中自定義wsgi函數(shù),make_server函數(shù)報錯的問題

    解決python3中自定義wsgi函數(shù),make_server函數(shù)報錯的問題

    下面小編就為大家分享一篇解決python3中自定義wsgi函數(shù),make_server函數(shù)報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • python繪圖庫Matplotlib的安裝

    python繪圖庫Matplotlib的安裝

    這篇文章主要介紹了python庫繪圖Matplotlib的安裝,需要的朋友可以參考下
    2014-07-07
  • python+html實現(xiàn)免費(fèi)在線行為驗證保護(hù)賬號安全

    python+html實現(xiàn)免費(fèi)在線行為驗證保護(hù)賬號安全

    這篇文章主要為大家介紹了python+html免費(fèi)在線行為驗證保護(hù)賬號安全實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Python統(tǒng)計可散列的對象之容器Counter詳解

    Python統(tǒng)計可散列的對象之容器Counter詳解

    Counter是一個容器,可以跟蹤等效值增加的次數(shù).這個類可以用來實現(xiàn)其他語言中常用包或多集合數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的算法.本篇文章非常詳細(xì)的介紹了容器Counter的使用方式,需要的朋友可以參考下
    2021-05-05
  • 基于K-Means聚類算法演示及可視化展示

    基于K-Means聚類算法演示及可視化展示

    這篇文章主要介紹了基于K-Means聚類算法演示及可視化展示,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python 搭建Web站點之Web服務(wù)器網(wǎng)關(guān)接口

    Python 搭建Web站點之Web服務(wù)器網(wǎng)關(guān)接口

    本文是Python 搭建Web站點系列文章的第二篇,接上文,主要給大家來講述Web服務(wù)器網(wǎng)關(guān)接口WSGI的相關(guān)資料,非常詳細(xì),有需要的小伙伴可以參考下
    2016-11-11
  • python實現(xiàn)將html表格轉(zhuǎn)換成CSV文件的方法

    python實現(xiàn)將html表格轉(zhuǎn)換成CSV文件的方法

    這篇文章主要介紹了python實現(xiàn)將html表格轉(zhuǎn)換成CSV文件的方法,涉及Python操作csv文件的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • Python3利用Dlib19.7實現(xiàn)攝像頭人臉識別的方法

    Python3利用Dlib19.7實現(xiàn)攝像頭人臉識別的方法

    這篇文章主要介紹了Python 3 利用 Dlib 19.7 實現(xiàn)攝像頭人臉識別 ,利用python開發(fā),借助Dlib庫捕獲攝像頭中的人臉,提取人臉特征,通過計算歐氏距離來和預(yù)存的人臉特征進(jìn)行對比,達(dá)到人臉識別的目的,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

科技| 鲁甸县| 静宁县| 班戈县| 陵水| 牙克石市| 临湘市| 临沂市| 北票市| 淳化县| 柳州市| 泰安市| 双江| 灌阳县| 都兰县| 岫岩| 韶关市| 涞源县| 靖安县| 芮城县| 夹江县| 安乡县| 上饶市| 铜山县| 富顺县| 巨野县| 昆山市| 平阳县| 鹰潭市| 曲沃县| 文登市| 西丰县| 博罗县| 盐源县| 商水县| 福清市| 凤阳县| 普兰店市| 崇礼县| 榆中县| 方正县|