问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

设计一个PYTHON 程序从文件中读取 SQL 语句

发布网友 发布时间: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 :