Python mysqlストレージ・プロシージャを呼び出すことによるデータ更新機能の例

4610 ワード

この例では、mysqlストレージ・プロシージャを呼び出すことによってPythonがデータの更新機能を実現することについて説明します.皆さんの参考にしてください.具体的には以下の通りです.
一、需要分析
管理レートの構成が間違っているため、注文書の還元利息表と注文書表の各種金額が生成され、管理費の計算に誤りがあり、データ訂正が必要である.そのため、車輪を作るために、後で多くの手間を省くために、すべてプログラムで修正して、人工にアクセスしません.
二、パラメータ付きmysqlストレージプロセスの作成
1、注文配当表の更新(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、注文書表の更新(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が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'


Pythonに関する詳細について興味のある読者は、「Python+MySQLデータベースプログラム設計入門チュートリアル」、「Pythonよくあるデータベース操作テクニック要約」、「Python数学演算テクニック総括」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニック総括」、「Python文字列操作テクニック要約」、『Python入門と進級経典教程』及び『Pythonファイルとディレクトリ操作技術要約』
ここではPythonプログラムの設計に役立つことを願っています.