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

目的:

        1、查詢結果

        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文件夾中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章