MYSql 存储过程中,用python 调用时,其中部分代码失效。
## 数据入表
insert into stocks_raising_limit_cnt
SELECT a.* FROM
(select * from stocks_raising_limit_cnt_tmp order by limit_up_cnt desc limit 999999999) a
group by ts_code;
## 15日内涨停次数,python调用时,此条更新语句失效。无解
update stocks_raising_limit_cnt m,
(SELECT count(1) as up_15,a.* FROM (select * from stocks_raising_limit_cnt where trade_date>=pdat15 order by ts_code,limit_up_cnt desc limit 999999 ) a group by ts_code) n
set m.limit_up_cnt_15 = n.up_15
where m.ts_code = n.ts_code and m.trade_date = tdat;
## 统计热门板块
insert into stocks_hot_industry
SELECT case when industry is null then 'ERROR' else industry end,trade_date,sum(1),ts_code,name,limit_up_cnt,limit_up_cnt_15
FROM (select * from stocks_raising_limit_cnt where trade_date=tdat order by industry,limit_up_cnt_15 desc limit 999999999) a
group by industry;
python代码 用的pymysql
conn = self.__getCon()
cursor = conn.cursor()
........
def callPro(self, proName,vList):
try:
with DBUtil() as dbUtil:
dbUtil.cursor.callproc(proName, vList)
DBUtil.getLogger().debug('callproc')
except Exception as e:
DBUtil.getLogger().error(e)
1、此存储过程在Workbench 直接call 完全正确。
2、用python调用,只有其中update一条语句失效,其它语句全部正确运行。
3、除此外,还有其它的存储过程也用到了update语句,无论怎么调用完全正确。
4、此条update语句数据量极小,整个存储过程运行也就1秒时间。
5、我还尝试了将insert和update合并,结果合并的语句也失效,是失效,无任何错误。
无解,有知道原因的吗?
update改用join试一下
update stocks_raising_limit_cnt m inner join
(SELECT count(1) as up_15,a.* FROM (select * from stocks_raising_limit_cnt where trade_date>=pdat15 order by ts_code,limit_up_cnt desc limit 999999 ) a group by ts_code) n on m.ts_code = n.ts_code
set m.limit_up_cnt_15 = n.up_15
where m.trade_date = tdat;