Python通过调用mysql存储过程实现更新数据功能示例
本文实例讲述了Python通过调用mysql存储过程实现更新数据功能。分享给大家供大家参考,具体如下:
一、需求分析
由于管理费率配置错误,生成订单的还本付息表和订单表的各种金额,管理费之间的计算都有错误,需要进行数据订正。为此,为了造个轮子,以后省很多功夫,全部用程序去修正,不接入人工。
二、带参数mysql存储过程创建
1、更新订单付息表(t_order_rapay)
dropprocedureifexistsupdate_t_order_rapay; delimiter$$ createprocedureupdate_t_order_rapay(INorderNovarchar(64)) begin declaret_order_novarchar(64); sett_order_no=orderNo; UPDATEt_order_repay SETtotal_amount=principal+interest+round(manage_amount*0.0808/0.052,3)+breach_amount, left_amount=principal+interest+round(manage_amount*0.0808/0.052,3)+breach_amount, left_repay_manager=round(manage_amount*0.0808/0.052,3), manage_amount=round(manage_amount*0.0808/0.052,3) WHEREorder_no=t_order_no; end$$ delimiter;
2、更新订单表(t_order_info)
dropprocedureifexistsupdate_t_order_info; delimiter$$ createprocedureupdate_t_order_info(INorderNovarchar(64)) begin declaret_order_novarchar(64); sett_order_no=orderNo; SELECTleft_amountinto@m1fromt_order_repayWHEREorder_no=t_order_noORDERBYplan_timeLIMIT1; UPDATEt_order_info setmanage_cost_rate=0.0808, manage_cost=round(manage_cost*0.0808/0.052,3), left_amount=borrow_amount+interest_amount+manage_cost, next_amount_need=@m1 WHEREorder_no=t_order_no; end$$ delimiter;
3、python调用mysql中的存储过程
#encoding:utf-8 importtime importsys reload(sys) sys.setdefaultencoding('utf-8') time1=time.time() importpandasaspd importpymysql ############################################从数据库读数据########################################### ###########线上###################### #加上字符集参数,防止中文乱码 #conn=pymysql.connect( #host="##########", #database="######", #user="####", #password="##########", #port=#######, #charset='utf8' #) ##############测试库###################### ###加上字符集参数,防止中文乱码 #conn=pymysql.connect( #host="172.16.34.32", #database="#########", #user="admin", #password="##############", #port=#########, #charset='utf8' #) #sql语句(安徽) #sqlcmd=""" #SELECTorder_nofromt_order_infoWHEREoffline_org_noin( #0032,0035,0036 # # #)andsubstr(create_time,1,10)>="2017-10-31" # #and`status`in(105,106,107,108) # #andmanage_cost_rate=0.052 # # #""" #################sql语句(江苏) #sqlcmd2=""" #SELECTorder_nofromt_order_infoWHEREoffline_org_noin( #0002,0005,0006,0007,0008,0009,0010,0011,0012,0013,0014,0017,0018,0019,0025,0026,0027,0028,0030,0031,0033,0034 #)andsubstr(create_time,1,10)>="2017-10-31" #and`status`in(105,106,107,108) #andmanage_cost_rate=0.052 # #""" #利用pandas模块导入mysql数据 #data=pd.read_sql(sqlcmd2,conn) #printdata # # ####################更新order_rapay表 #foreachindata["order_no"]: #printeach ##创建游标 #cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) ##有参数存储过程 #cursor.execute('callupdate_t_order_rapay(%s)',(each)) #conn.commit() # #print"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" ######################更新order_info表################### #foreachindata["order_no"]: #printeach # ##创建游标 #cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) ##有参数存储过程 #cursor.execute('callupdate_t_order_info(%s)',(each)) #conn.commit() # # #cursor.close() #print'调用存储过程完毕................' #conn.close() #time2=time.time() #printu'总共耗时:'+str(time2-time1)+'s'
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python+MySQL数据库程序设计入门教程》、《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。