python 有谁知道 sql 解析库?

2016-04-24 11:39:36 +08:00
 faketemp

比如针对 Oracle 中的 SQL 语法结构 sql = "select a.first_name ename,temp.ryxm cname,temp.bm from table1 a,table2 temp where a.manager_id=temp.id;"

问下 python 中有没有现有比较成熟的用于解析 sql 的第三方库( sqlparse 好像不太行),最好是支持多种数据库 SQL 语法格式识别的。

比如解析以上 Oracle 语法 sql 能够区分出类似效果?? 表名:["table1","table2"] 列名:{"table1":"first_name","table2":"ryxm","table2":"bm"}

11199 次点击
所在节点    Python
21 条回复
faketemp
2016-04-24 11:42:48 +08:00
汗,忘了 markdown 格式了
简单的说就是把下面的 sql 解析一下
sql = "select a.first_name ename,temp.ryxm cname,temp.bm from table1 a,table2 temp where a.manager_id=temp.id;"

结果类似:
表名:["table1","table2"]
列名:{"table1":"first_name","table2":"ryxm","table2":"bm"}
tabris17
2016-04-24 11:52:51 +08:00
faketemp
2016-04-24 14:59:14 +08:00
@tabris17 它好像文档不太全 没找到需要的功能哈 能针对以上的例子请教演示下用法不???
kqz901002
2016-04-24 18:22:33 +08:00
sqlalchemy ?
xuyuheng0905
2016-04-24 19:56:55 +08:00
sqlalchemy ?
xuyuheng0905
2016-04-24 19:57:11 +08:00
sqlalchemy
faketemp
2016-04-24 20:52:31 +08:00
@xuyuheng0905 @kqz901002
sqlalchemy 之前没用过,具体如何解析文本 SQL 语句来识别出表名、字段名,得闲的时候可以针对以上的例子具体演示下不???
pynix
2016-04-24 21:33:10 +08:00
没有官方驱动吗?
faketemp
2016-04-24 22:23:37 +08:00
@pynix 你是说 python 标准库??好像没有解析 sql 语句的
aiver
2016-04-25 09:01:47 +08:00
你这已经不叫解析 sql 语句了,你想解析的是 sql 里面的字段,还不如自己写了提取
SmiteChow
2016-04-25 17:59:36 +08:00
@xuyuheng0905 sqlalchemy 不会去解析 raw sql 的,连更底层的 mysql - python 都不会,解析 sql 语句是在 server 端完成的
xuyuheng0905
2016-04-25 21:59:06 +08:00
刚下班,想问一下,你想做什么功能呢?
faketemp
2016-04-25 23:12:05 +08:00
@xuyuheng0905 从某 oracle 系统导出好多 excel 文件(数量还会增加,数据来源别处不是自己导的),格式是 sheet2 的 A1.value 就是本工作簿数据来源 SQL ,现在想统计出每个工作簿数据都对应使用了 oracle 数据库中的哪些表——所以才想从每个工作簿中取出 sql 语句,从 sql 语句中解析出来表名、字段名等信息
不知道我有没有说明白…
xuyuheng0905
2016-04-26 22:43:58 +08:00
@faketemp 也就是说,你要读取这些 SQL ,然后做分析, SQL 的语法分析?之前看过一篇 blog ,有个人干过这个事情。 http://zh.lucida.me/blog/on-learning-algorithms/ ,这方面没有研究过,但是我觉得你可以从这个思路开始入手。
faketemp
2016-04-27 07:17:14 +08:00
@xuyuheng0905 十分感谢,看来要自己动手了
Python 从 Hello world 到 Import world ,还有很长的路要走 O(∩_∩)O~
参考这一篇文章看看吧,[http://www.tuicool.com/articles/jIZr2q2]( http://www.tuicool.com/articles/jIZr2q2)
faketemp
2016-04-27 07:27:54 +08:00
@xuyuheng0905 我终于找到了几近完美的解决方案,遗憾的是官方没有提供 python 库
看看这里 http://www.sqlparser.com/products.php
![]( http://i4.piimg.com/1c82d93d3877bfb5.png)
xuyuheng0905
2016-04-27 08:03:33 +08:00
@faketemp 不错!
sizeoftank
2016-04-27 16:37:42 +08:00
我用 Python Lex-Yacc 撸过一个~ 用在目前公司项目里后闭源了 - -
vvvvxxxx
2018-08-30 09:29:25 +08:00
请问楼主这个问题解决了吗,因为最近也要解析 sql 语句获取表名,没有什么思路,希望楼主能给个方向
moon1223
2020-02-26 15:20:21 +08:00
同问楼主,这个问题解决了吗,因为最近也要解析 sql 语句获取表名,没有什么思路,希望楼主能给个方向

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/274013

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX