mysqlupdatein上限_update语句中条件限制是不能⽤in语句的
吗
1.接收⽤户SQL
判断⽤户输⼊是否为SQL
2.SQL解析主函数sql_parse
where_parse
three_parse
insert_parse
delete_parse
update_parse
select_parse
分发SQL给对应语句的函数来做解析
解析后交给handle_parse,来控制返回
解析SQL语句中的多条件
返回解析后的SQL
第⼆部分:SQL执⾏
1.接收解析后的SQL
2.SQL执⾏主函数sql_action
where_action
logic_action
limit_action
search_action
insert
delete
update
select
分发SQL给对应函数来执⾏
执⾏SQL语句时的多条件
返回执⾏SQL的结果
三、图解
代码:
#/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):
'''
mysql 要钱吗定义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 :\033[42;1m%s\033[0m' %sql_l) # select语句多种条件查询,列成字典,不同条件不同列表
sql_dic={
'func':select, #执⾏select语句
'select':[], #查询字段
'from':[], #数据库.表
'where':[], #filter条件,怎么
'limit':[], #limit条件,限制
}
return handle_parse(sql_l,sql_dic)
def handle_parse(sql_l,sql_dic): #专门做sql解析操作
'''
执⾏sql解析操作,返回sql_dic
:param sql_l: sql按照空格分割的列表
:param sql_dic: 待填充的字典
:return: 返回字典格式的sql解析结果
'''
# print('sql_l is \033[41;1m%s\033[0m \nsql_dic is \033[41;1m%s\033[0m' %(sql_l,sql_dic))
tag=False #设置警报 默认是关闭False
for item in sql_l: #循环 按空格切割⽤户sql的列表
if tag and item in sql_dic: #判断警报拉响是True 并且⽤户sql的条件 在条件select语句字典⾥⾯,则关闭警报
tag=False #关闭警报
if not tag and item in sql_dic: #判断警报没有拉响 并且⽤户sql的条件 在条件select语句字典⾥⾯
tag=True #拉响警报
key=item #取出⽤户sql的条件
continue #跳出本次判断
if tag: #判断报警拉响
sql_dic[key].append(item) #把取出的⽤户sql 添加到 select语句多种条件对应的字典⾥
if ('where'): #判断 ⽤户sql where语句
sql_dic['where']=where_parse(('where')) #['id>4','and','id<10'] #调⽤where_parse函数 把整理好的⽤户sql的where语句 覆盖之前没整理好的
# print('from in the handle_parse sql_dic is \033[43;1m%s\033[0m' %sql_dic)
return sql_dic #返回 解析好的 ⽤户sql 字典
def where_parse(where_l): #['id>','4','and','id','<10'] ---> #['id>4','and','id<10']
'''
分析⽤户sql where的各种条件,再拼成合理的条件字符串
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论