数据库存储过程的实际应用

在django项目中,使用存储过程步骤:

①新建文件: xxx.sh

②在xxx.sh文件内写存储过程(加粗的是强调而已):

delimiter //                                                                                                                                                                       
drop procedure if exists upload_combo_complete;
CREATE PROCEDURE upload_combo_complete (uid INT,combo VARCHAR(100))

BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE tmpcount INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
START TRANSACTION;
select count into tmpcount from combocomplete where code = combo;
IF (tmpcount > 0) THEN
IF uid = -1 THEN
update combocomplete set count = tmpcount+1 where code = combo;
ELSE
insert into combouidcomplete (uid,code,time) values(uid,combo,UNIX_TIMESTAMP(NOW()));
update combocomplete set count = tmpcount+1 where code = combo;
END IF;
ELSE
IF uid = -1 THEN
insert into combocomplete (code,count) values(combo,1);
ELSE
insert into combouidcomplete (uid,code,time) values(uid,combo,UNIX_TIMESTAMP(NOW()));
insert into combocomplete (code,count) values(combo,1);
END IF;
END IF;

IF t_error = 1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
END //

delimiter ;

③ 在方法中调用存储过程:
def upload_complete_status(uid,app,SPORTPLANDB,combolist):
for item in combolist:
sql="call upload_combo_complete(%d,'%s')"%(uid,item)
try:
MySQL.callproc(sql=sql,db=SPORTPLANDB)
return 0
except Exception,e:
logutils.info('info','m:upload_complete_status,Exception is %s'%(e))
return -20003


补充:方法中的 MYSQL.callproc 定义如下:
@classmethod
def callproc(cls, sql, params=None, db=GeneralConf.SDB):
try:
cursor = connections[db].cursor()
cursor.execute(sql, params)
finally:
cursor.close()
 

转载于:https://www.cnblogs.com/yuzhaoblog/p/8464548.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值