Python mysqlストレージ・プロシージャを呼び出すことによるデータ更新機能の例
4610 ワード
この例では、mysqlストレージ・プロシージャを呼び出すことによってPythonがデータの更新機能を実現することについて説明します.皆さんの参考にしてください.具体的には以下の通りです.
一、需要分析
管理レートの構成が間違っているため、注文書の還元利息表と注文書表の各種金額が生成され、管理費の計算に誤りがあり、データ訂正が必要である.そのため、車輪を作るために、後で多くの手間を省くために、すべてプログラムで修正して、人工にアクセスしません.
二、パラメータ付きmysqlストレージプロセスの作成
1、注文配当表の更新(t_order_rapay)
2、注文書表の更新(t_order_info)
3、pythonがmysqlのストレージプロセスを呼び出す
Pythonに関する詳細について興味のある読者は、「Python+MySQLデータベースプログラム設計入門チュートリアル」、「Pythonよくあるデータベース操作テクニック要約」、「Python数学演算テクニック総括」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python関数使用テクニック総括」、「Python文字列操作テクニック要約」、『Python入門と進級経典教程』及び『Pythonファイルとディレクトリ操作技術要約』
ここでは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プログラムの設計に役立つことを願っています.