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