Tornado+SQLalchemy(七)Tornado中 使用mysql 的存储过程

目的:

        1、查询结果

Tornado+SQLalchemy(七)Tornado中 使用mysql 的存储过程_第1张图片

        2、表结构

Tornado+SQLalchemy(七)Tornado中 使用mysql 的存储过程_第2张图片

过程: 

        1、编写 函数(即存储过程) 

                PS:查询界面运行之后会在Navcat中的函数生成名为:getChildrenOrg  的函数

CREATE FUNCTION getChildrenOrg (orgid INT) RETURNS VARCHAR (4000)
BEGIN
DECLARE oTemp VARCHAR (4000);
DECLARE oTempChild VARCHAR (4000);
SET oTemp = '';
SET oTempChild = CAST(orgid AS CHAR);
WHILE oTempChild IS NOT NULL DO
SET oTemp = CONCAT(oTemp, ',', oTempChild);
SELECT
    -- DeptID为主键,根据自己的表字段修改
	GROUP_CONCAT(DeptID) INTO oTempChild
FROM
    -- 表名
	base_dept
WHERE
    -- FatherID为上级ID,根据自己的表字段修改
	FIND_IN_SET(FatherID, oTempChild) > 0;
END
WHILE;
RETURN oTemp;
END

        2、 调用方法

-- getChildrenOrg (2) :此为过程1中的生成的存储过程; (2)是输出本级的ID,向下查询部门
SELECT * FROM base_dept WHERE FIND_IN_SET(DeptID,getChildrenOrg (2))

        3、SQLAlchemy中调用

                ①、在创建连接 文件中创建cursor

db_url = 'mysql+pymysql://root:@127.0.0.1:3307/tornado9'
# py3 表生成模型
# sqlacodegen mysql+pymysql://root:@127.0.0.1:3307/la80?charset=utf8 --outfile la80_models.py
# 创建数据库引擎链接
engine = create_engine(db_url)
# 创建cursor
conn = engine.raw_connection()
cursor = conn.cursor()

                ②、在视图文件中导包

from Tornado9.Mytorndo.utils.conn import session_maker, cursor


class IndexHandler(tornado.web.RequestHandler):
    def get(self):
        sql = 'SELECT * FROM base_dept WHERE FIND_IN_SET(DeptID,getChildrenOrg (2))'
        cursor.execute(sql)
        res_data = cursor.fetchall()
        res = res_data
        print(res) # ((2, '00002', '财务部', None, 1), (3, '00003', '生产部', None, 2))
        self.write('hello!')

PS:此测试文件在Tornado9文件夹中

你可能感兴趣的:(Tornado)