背景
在某個(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()