背景
在某个应用场景中,需要对一个航班的机组3人进行航线拆分,原数据库字段内容为:姓名A,姓名B,姓名C,拆分后的结果是导入到[crew_link],成为3行不同的数据。
按照普通拆分方法执行insert into语句,如果程序在导入第二个人时被意外终止,则下次导入时第一个人就会被重复导入,所以引入事物查询的目的就是为了防止重复,这3人数据的插入,要么全部被执行,要么一条也不执行,从而保证了数据的完整性。
具体的实现方法是在原有的mysql.py中增加如下语句:
def query_list(Muti_SQL):
'''
######[数据库查询]######
#函数说明 2018/3/30
目的:新增本函数的目的是进行事务一致性查询时,保持数据库数据的完整性
参数:SQL代表接收到的sql语句,可以包含select、update、insert into、delete等等
注:SQL为列表类型,可接受多语句
返回:返回cursor
调用该函数可以进行一系列fetch操作,比较实用
备注:cursor类型为字典型
'''
conn = connectDB()
if conn == 0:
return 0
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# print SQL # 检查SQL语句是否正确
# 下面的代码是一个事务
try:
#历遍列表中的sql语句,并逐一查询,并最终执行
for n in Muti_SQL:
cursor.execute(n)
conn.commit()
return cursor
except:
conn.rollback() #引擎不支持事务时会报错
finally:
cursor.close()
conn.close()