使用Python处理MySQL逻辑时如果把SQL语句直接写在字符串中调用多次运行需要多次编译而且代码维护难度增加,MySQL存储过程将SQL逻辑封装解决这个问题,下面记录一下测试效果。
创建测试存储过程
delimiter $$
DROP PROCEDURE IF EXISTS `add_person`$$
CREATE PROCEDURE `add_person`(IN p_id int,p_name VARCHAR(50),p_etl_date VARCHAR(50))
BEGIN
INSERT into ods_person(id,`name`,etl_dat)
VALUES(p_id,p_name,p_etl_date);
END$$
delimiter ;
MySQL测试
SELECT * FROM ods_person;
调用存储过程
call add_person(9,'Kobe','2020-04-15');
python调用:
import MySQLdb
mysqlCon = MySQLdb.connect(host='172.18.0.1',user='root',passwd='root',db='test',port=3306,charset='utf8')
mysqlCur = mysqlCon.cursor()
sql = 'select * from ods_person'
# 提交参数时要是用元祖即使只有一个参数也需要使用(a,)
mysqlCur.callproc('add_person',(13,'Curry','2020-04-15'))
# 需要commit否则不会执行
mysqlCon.commit()
mysqlCur.execute(sql)
print mysqlCur.fetchall()
mysqlCur.close()
mysqlCon.close()
以上操作需要注意的是传参使用元祖,和commit。
使用Python处理MySQL逻辑时如果把SQL语句直接写在字符串中调用多次运行需要多次编译而且代码维护难度增加,MySQL存储过程将SQL逻辑封装解决这个问题,下面记录一下测试效果。创建测试存储过程delimiter $$DROP PROCEDURE IF EXISTS `add_person`$$CREATE PROCEDURE `add_person`(IN p_id in...
什么是存储过程:
存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。
存储过程的好处:
1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。
2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。
3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。
小结:总之存储过程是好东西,在做项目时属于必备
内容概要:
使用python语言,Django框架,实现调用mysql存储过程。包括通过Navicat工具在mysql数据库中创建存储过程的方法,django配置文件,路由规则,前端页面的使用,通过类实现get和post请示。
适合人群:
初学或刚入门的python,mysql数据库的人群
能学到什么:
如何创建mysql数据库存储过程,django如果与mysql数据库进行数据交换,前端如何提交get或post请示。
conn = pymysql.connect(host= '127.0.0.1',port = 3306,
user = 'root',password = 'root',
database = 'test',charset = 'utf8')
cur = conn.cursor()
cur.callproc('T1') # 调用存储过程
hive sql报错FAILED: SemanticException Line 0:-1 Both left and right aliases encountered in JOIN
10643