天天看點

Tornado+SQLalchemy(七)Tornado中 使用mysql 的存儲過程

目的:

        1、查詢結果

Tornado+SQLalchemy(七)Tornado中 使用mysql 的存儲過程

        2、表結構

Tornado+SQLalchemy(七)Tornado中 使用mysql 的存儲過程

過程: 

        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檔案夾中

繼續閱讀