MYSQL中的多事務(wù)處理

背景

在某個(gè)應(yīng)用場(chǎng)景中,需要對(duì)一個(gè)航班的機(jī)組3人進(jìn)行航線拆分,原數(shù)據(jù)庫(kù)字段內(nèi)容為:姓名A,姓名B,姓名C,拆分后的結(jié)果是導(dǎo)入到[crew_link],成為3行不同的數(shù)據(jù)。

按照普通拆分方法執(zhí)行insert into語(yǔ)句,如果程序在導(dǎo)入第二個(gè)人時(shí)被意外終止,則下次導(dǎo)入時(shí)第一個(gè)人就會(huì)被重復(fù)導(dǎo)入,所以引入事物查詢的目的就是為了防止重復(fù),這3人數(shù)據(jù)的插入,要么全部被執(zhí)行,要么一條也不執(zhí)行,從而保證了數(shù)據(jù)的完整性。

具體的實(shí)現(xiàn)方法是在原有的mysql.py中增加如下語(yǔ)句:

def query_list(Muti_SQL):
    '''
    ######[數(shù)據(jù)庫(kù)查詢]######
    #函數(shù)說(shuō)明 2018/3/30
    目的:新增本函數(shù)的目的是進(jìn)行事務(wù)一致性查詢時(shí),保持?jǐn)?shù)據(jù)庫(kù)數(shù)據(jù)的完整性
    參數(shù):SQL代表接收到的sql語(yǔ)句,可以包含select、update、insert into、delete等等
    注:SQL為列表類型,可接受多語(yǔ)句
    返回:返回cursor
    調(diào)用該函數(shù)可以進(jìn)行一系列fetch操作,比較實(shí)用
    備注:cursor類型為字典型
    
    '''
    conn = connectDB()
    if conn == 0:
        return 0
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    # print SQL # 檢查SQL語(yǔ)句是否正確
    # 下面的代碼是一個(gè)事務(wù)
    try:
        #歷遍列表中的sql語(yǔ)句,并逐一查詢,并最終執(zhí)行
        for n in Muti_SQL:
            cursor.execute(n)
        conn.commit()  
        return cursor
    except:
        conn.rollback() #引擎不支持事務(wù)時(shí)會(huì)報(bào)錯(cuò)
    finally:
        cursor.close()
        conn.close()

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容