当前位置: 首页 > news >正文

苏州网站建设学费那些外贸网站个人可以做

苏州网站建设学费,那些外贸网站个人可以做,微小店网站建设费用,宁波微网站建设1.介绍 在某些场景下#xff0c;我们可能需要从一个复杂的SQL语句中提取对应的表名称#xff0c;在这样的场景下#xff0c;我们如果在python中处理的话#xff0c;就需要用到SQLparse这个库。 SQLparse 是一个用于解析 SQL 查询语句的 Python 库。它可以将复杂的 SQL 查询…1.介绍 在某些场景下我们可能需要从一个复杂的SQL语句中提取对应的表名称在这样的场景下我们如果在python中处理的话就需要用到SQLparse这个库。 SQLparse 是一个用于解析 SQL 查询语句的 Python 库。它可以将复杂的 SQL 查询转换为易于分析的结构并提供了许多功能来检索、修改和分析 SQL 查询中的元素。其中一个常见的用例是从查询中提取表名称。 2.安装 SQLparse 首先确保您已经安装了 SQLparse。您可以使用 pip 进行安装 pip install sqlparse3.解析 SQL 查询语句 使用 SQLparse 解析 SQL 查询语句非常简单。只需导入库并将查询语句作为字符串传递给 sqlparse.parse() 函数。 4.提取表名称 提取表名称通常涉及到遍历解析后的 SQL 结构以查找关键元素这些元素通常表示表名称。SQLparse 使用了一种抽象语法树AST的结构可以轻松访问查询中的各个部分。 示例代码 下面是一个示例代码演示如何使用 SQLparse 从简单的SQL 查询语句中得到表名称 import sqlparse # 定义一个 SQL 查询语句 sql_query SELECT * FROM customers WHERE age 30; # 解析 SQL 查询语句 parsed_query sqlparse.parse(sql_query) # 遍历解析出表名 table_names[] for stmt in parsed_query:for token in stmt.tokens:if isinstance(token, sqlparse.sql.Identifier) :table_name token.get_real_name()table_names.append(table_name) print(table_names) 代码运行后结果如下 在上述代码中我们首先定义了一个 SQL 查询语句。然后我们使用 SQLparse 解析查询语句将其转换为 AST 结构。接下来我们遍历 AST 结构以查找关键元素例如表名称。但是敏感和聪明的你会发现用上述代码在实际场景中时会出现各种各样的问题。 5.实际场景中的问题 5.1 无法处理嵌套类型的语句 如在处理下面这个SQL语句时无法提取嵌套在里面的表名称 SELECT o.id, o.name FROM orders oLEFT JOIN products p ON o.product_code p.product_codeWHERE o.customer_id IN (SELECT id FROM customers WHERE country USA)OR p.category Electronics简单的嵌套无法识别 5.2 无法处理重命名表的语句 如下面的SQL语句会出现提取错误的情况 with co as (SELECT o.id, o.name FROM orders oLEFT JOIN products p ON o.product_code p.product_codeWHERE o.customer_id IN (SELECT id FROM customers WHERE country USA)OR p.category Electronics) select * from co提取结果如下 5.3 多个表名重复时的去重问题 在处理基础的SQL语句时会出现多个相同的表 SELECT o.id, o.name FROM orders oLEFT JOIN orders o2 on o.id o2.pre_id处理后截图如下 5.4 其他问题 有一些场景下还会提取出字段信息夹杂其中的情况或者有一些存在表空间的情况会进行重命名等等听到这里你是不是觉得处理起来令人头大别慌接着往下看。 6.终极解决方案 6.1 解决思路 经过本人的一番思考后采用sqlparse模块和re模块相结合后惊喜的发现能够灵活的从绝大部分的sql语句中正确地提取出表名称来。 解决思路如下 1.先将sql语句进行规范2.获取left和join关键字后面的表名3.对表名进行各种处理4.去重后输出结果 6.2 实际代码 import sqlparse import redef format_sql(sql_content):将sql语句进行规范化并去除sql中的注释输入和输出均为字符串parse_strsqlparse.format(sql_content,reindentTrue,strip_commentsTrue)return parse_strdef extract_table_names(sql_query):从sql中提取对应的表名称输出为列表table_names set()# 解析SQL语句parsed sqlparse.parse(sql_query)# 正则表达式模式用于匹配表名table_name_pattern r\bFROM\s([^\s\(\)\,])|\bJOIN\s([^\s\(\)\,])# with 子句判断with_pattern rwith\s(\w)\sasremove_with_name[]# 遍历解析后的语句块for statement in parsed:# 转换为字符串statement_str str(statement).lower()#将字符串中的特殊语法置空statement_str re.sub((substring|extract)\s*\(((.|\s)*?)\),,statement_str)# 查找匹配的表名matches re.findall(table_name_pattern, statement_str, re.IGNORECASE)for match in matches:# 提取非空的表名部分for name in match:#if name and name not in not_contain_list:if name :# 对于可能包含命名空间的情况只保留最后一部分作为表名table_name name.split(.)[-1]#去除表名中的特殊符号table_name re.sub((||\|;),,table_name)table_names.add(table_name)#处理特殊的with语句if with in statement_str:match re.search(with_pattern, statement_str)if match:result match.group(1)remove_with_name.append(result)table_list list(table_names)#移除多余的表名if remove_with_name:table_list list(set(table_list)-set(remove_with_name))return table_list sql_querywith co as (SELECT o.id, o.name FROM orders oLEFT JOIN products p ON o.product_code p.product_codeWHERE o.customer_id IN (SELECT id FROM customers WHERE country USA)OR p.category Electronics) select * from co parse_strformat_sql(sql_query) table_names extract_table_names(parse_str) # 打印提取的表名 print(table_names)通过运行上述的代码成功提取到多有表名称 7 后记 以上就是如何从一个复杂的SQL语句中来提取表名的例子欢迎各位踊跃尝试勇于纠错一起完善代码让更多的人收益一起加油~
http://www.hkea.cn/news/14556236/

相关文章:

  • 做网站开发怎么接单建设信用卡官网网站
  • 网站备案幕怎么样申请网站
  • r语言网站开发python 类似wordpress
  • 品牌网站开发背景静态网站的建设
  • 北京宏福建设工程有限公司网站淘宝做代销在哪个网站上进货比较好
  • 北京建设工程质量协会网站网站备案网站名称
  • 河北中太建设集团有限公司网站还能做网站的分类
  • 在百度上建网站龙岩网站建
  • 企业网站布局管理咨询有限公司的经营范围
  • 做网站建议广东专业网站建设效果
  • 济南seo整站优化厂家网页游戏开发入门
  • 江山市住房和城乡建设局网站高端客户开发
  • 网站建设技术服务沧县住房和城乡建设局网站
  • 快速建站属于saas吗相册制作软件
  • 沧州哪里做网站蓝色经典网站
  • 网站ftp地址是什么360提交网站入口
  • 前端做网站如何调接口百度网址收录提交入口
  • 网站模板 茶叶响应式营销型网站建设明细报价表
  • 大学生兼职做网站最新流行网站开发技术
  • 外国的网站是什么网站太仓网站建设网站推广
  • 福州最好的网站建设公司建设银行兰州分行网站
  • 清明节ppt模板免费下载四川成都网站优化
  • 甘肃省建设厅查行网站中国小型加工机械网
  • 合肥营销型网站建设开发重庆建网站一般多少钱
  • 做简易网站网页设计高端
  • qq创号申请注册网站网站建设推荐郑国华
  • 没有网站怎么做熊掌号国内精品电影资源
  • 网站建设可行性分析报告范文宁波网站建设使用技巧分享
  • 算命网站搭建网站二次开发是什么意思
  • 广西响应式网站建设山东专业网站解决方案制作