发布网友 发布时间:2022-05-02 11:15
共2个回答
懂视网 时间:2022-05-02 15:36
代码: #/usr/local/env python #_*_coding:utf-8_*_ #第一部分:sql解析 import os def sql_parse(sql): #用户输入sql 转成结构化的字典 ''' 第一步:sql解析 流程 1.收到 sql查询条件 2.sql_parse 来分发要求给 select_parse 3.select_parse 调用 handle_parse 解析sql 4.handle_parse 返回解析sql后的结果 sql_dic 给 select_parse 5.select_parse 把 sql_dic 返回给sql_parse sql_dic=sql_parse(sql) #用户输入sql 转成结构化的字典sql_dic sql语句四种操作格式:insert delete update select 提取用户输入sql 的操作关键词 再进行分析和分发操作 把sql字符串切分,提取命令信息,分发给具体解析函数去解析 :param sql:用户输入的字符串 :return:返回字典格式sql解析结果 ''' #sql命令操作 解析函数的字典 根据用户的命令来找相对应的函数 parse_func={ 'insert':insert_parse, 'delete':delete_parse, 'update':update_parse, 'select':select_parse, } #print('用户输入 sql str is : %s' %sql) #打印用户输入的sql sql_l=sql.split(' ') #按空格切割用户sql 成列表 方便提取命令信息 func=sql_l[0] #取出用户的sql命令 #判断用户输入的sql命令 是否在定义好的sql命令函数的字典里面,如果不在字典里面,则返回空 res='' if func in parse_func: res=parse_func[func](sql_l) #把切割后的 用户sql的列表 传入对应的sql命令函数里 return res def insert_parse(sql_l): ''' 定义insert语句的语法结构,执行sql解析操作,返回sql_dic :param sql:sql按照空格分割的列表 :return:返回字典格式的sql解析结果 ''' sql_dic={ 'func':insert, #函数名 'insert':[], #insert选项,留出扩展 'into':[], #表名 'values':[], #值 } return handle_parse(sql_l,sql_dic) def delete_parse(sql_l): ''' 定义delete语句的语法结构,执行sql解析操作,返回sql_dic :param sql:sql按照空格分割的列表 :return:返回字典格式的sql解析结果 ''' sql_dic = { 'func': delete, 'delete': [], # delete选项,留出扩展 'from': [], # 表名 'where': [], # filter条件 } return handle_parse(sql_l, sql_dic) def update_parse(sql_l): ''' 定义update语句的语法结构,执行sql解析操作,返回sql_dic :param sql:sql按照空格分割的列表 :return:返回字典格式的sql解析结果 ''' sql_dic = { 'func': update, 'update': [], # update选项,留出扩展 'set': [], # 修改的值 'where': [], # filter条件 } return handle_parse(sql_l, sql_dic) def select_parse(sql_l): ''' 定义select语句的语法结构,执行sql解析操作,返回sql_dic :param sql:sql按照空格分割的列表 :return:返回字典格式的sql解析结果 ''' # print('from in the select_parse :