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

苏州网站建设学费门户网站开发维护合同范本

苏州网站建设学费,门户网站开发维护合同范本,北京seo优化,门户网站属于什么类型的模式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.dnsts.com.cn/news/60241.html

相关文章:

  • 哪些客户需要做网站微信商户服务商平台
  • wap网站系统成都百度网站优化
  • 网站备案中页面网页设计与制作(第3版)书籍
  • 合肥哪家做网站wordpress文章分类跳转到指定模板
  • 设计网站怎么做品牌手机网站建设
  • 响应式 网站 开发泛华建设集团网站
  • 高档网站建维护网站多少钱
  • 建设网站是什么职位手机网站 win8风格
  • 男女性直接做的视频网站seo网站诊断优化流程
  • asp网站打开很慢的原因网站入股云建站
  • 做百度网站需不需要备案广西住房和城乡建设厅招聘
  • 优班图搭建网站wordpress怎么弄会员
  • 律师网站建设建议wordpress安装文件
  • 工装设计网站案例网站开发方案服装网站简介
  • 免费企业邮箱账号密码深圳网站维护seo
  • 域名有了主机有了如何做网站五十一团 黑龙江生产建设兵团知青网站
  • 官方网站开发公司排名设计自己的专属logo
  • 仙游县住房和城乡建设局网站读后感页面设计模板
  • 如何查网站的备案号wordpress按钮代码
  • 怎么制作有效网站男和女做暖暖网站
  • 做网站的抬头怎么做珠海seo海网站建设
  • 聚美联盟网站怎么做外贸网站推广seo
  • 网站策划知识电子商务网站建设有什么认识
  • 网站建设调查表上海徐汇区网站建设公司
  • 英文网站制作费用湖州营销网站建设
  • 做网站找俊义 合优想卖产品怎么推广宣传
  • 宝坻集团网站建设一级网站和二级网站的区别
  • 上海做网站yuanmus柯桥网站建设
  • 抓取网站后台外贸网站哪家好
  • 龙岗优化网站建设优化好的网站