Cette fois, je vais vous expliquer comment utiliser Python pour appeler mysql pour mettre à jour les données. Quelles sont les précautions pour appeler mysql pour mettre à jour les données en Python ? Voici un cas pratique, jetons un coup d'oeil.
L'exemple de cet article décrit comment Python implémente la fonction de mise à jour des données en appelant mysqlprocédure stockée. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
1. Analyse de la demande
En raison de l'erreur de configuration du tarif de gestion, le remboursement de l'ordre généré Il y a des erreurs dans le calcul de divers montants et frais de gestion dans le tableau de paiement des intérêts et le tableau des ordres, et une correction des données est nécessaire. Pour cette raison, pour construire une roue, cela permettra d'économiser beaucoup d'efforts à l'avenir, et toutes les modifications seront effectuées avec des programmes, sans aucune saisie manuelle.
2. Créer une procédure stockée MySQL avec des paramètres
1. Mettre à jour la table de paiement des intérêts de commande (t_order_rapay)
drop procedure if exists update_t_order_rapay; delimiter $$ create procedure update_t_order_rapay(IN orderNo varchar(64)) begin declare t_order_no varchar(64); set t_order_no=orderNo; UPDATE t_order_repay SET total_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) WHERE order_no=t_order_no; end $$ delimiter;
2. Mettre à jour la table de commande (t_order_info)
drop procedure if exists update_t_order_info; delimiter $$ create procedure update_t_order_info(IN orderNo varchar(64)) begin declare t_order_no varchar(64); set t_order_no=orderNo; SELECT left_amount into @m1 from t_order_repay WHERE order_no=t_order_no ORDER BY plan_time LIMIT 1; UPDATE t_order_info set manage_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 WHERE order_no=t_order_no; end $$ delimiter;
3. Python appelle la procédure stockée dans MySQL
# encoding: utf-8 import time import sys reload(sys) sys.setdefaultencoding('utf-8') time1 = time.time() import pandas as pd import pymysql ############################################从数据库读数据########################################### ###########线上###################### # 加上字符集参数,防止中文乱码 # 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=""" # SELECT order_no from t_order_info WHERE offline_org_no in( # 0032,0035,0036 # # # ) and substr(create_time,1,10)>="2017-10-31" # # and `status` in(105,106,107,108) # # and manage_cost_rate=0.052 # # # """ #################sql语句(江苏) # sqlcmd2=""" # SELECT order_no from t_order_info WHERE offline_org_no in( # 0002,0005,0006,0007,0008,0009,0010,0011,0012,0013,0014,0017,0018,0019,0025,0026,0027,0028,0030,0031,0033,0034 # ) and substr(create_time,1,10)>="2017-10-31" # and `status` in(105,106,107,108) # and manage_cost_rate=0.052 # # """ #利用pandas 模块导入mysql数据 # data=pd.read_sql(sqlcmd2,conn) # print data # # # ###################更新order_rapay表 # for each in data["order_no"]: # print each # # 创建游标 # cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # #有参数存储过程 # cursor.execute('call update_t_order_rapay(%s)',(each)) # conn.commit() # # print "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" # #####################更新order_info表################### # for each in data["order_no"]: # print each # # # 创建游标 # cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # #有参数存储过程 # cursor.execute('call update_t_order_info(%s)', (each)) # conn.commit() # # # cursor.close() # print '调用存储过程完毕................' # conn.close() # time2=time.time() # print u'总共耗时:' + str(time2 - time1) + 's'
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
L'objet de diff est l'événement d'écoute du dom virtuel
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!