V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
faketemp
V2EX  ›  Python

python 有谁知道 sql 解析库?

  •  
  •   faketemp · 2016-04-24 11:39:36 +08:00 · 11179 次点击
    这是一个创建于 3142 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如针对 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"}

    21 条回复    2020-02-27 10:32:51 +08:00
    faketemp
        1
    faketemp  
    OP
       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
        2
    tabris17  
       2016-04-24 11:52:51 +08:00
    faketemp
        3
    faketemp  
    OP
       2016-04-24 14:59:14 +08:00 via Android
    @tabris17 它好像文档不太全 没找到需要的功能哈 能针对以上的例子请教演示下用法不???
    kqz901002
        4
    kqz901002  
       2016-04-24 18:22:33 +08:00
    sqlalchemy ?
    xuyuheng0905
        5
    xuyuheng0905  
       2016-04-24 19:56:55 +08:00
    sqlalchemy ?
    xuyuheng0905
        6
    xuyuheng0905  
       2016-04-24 19:57:11 +08:00   ❤️ 1
    sqlalchemy
    faketemp
        7
    faketemp  
    OP
       2016-04-24 20:52:31 +08:00
    @xuyuheng0905 @kqz901002
    sqlalchemy 之前没用过,具体如何解析文本 SQL 语句来识别出表名、字段名,得闲的时候可以针对以上的例子具体演示下不???
    pynix
        8
    pynix  
       2016-04-24 21:33:10 +08:00
    没有官方驱动吗?
    faketemp
        9
    faketemp  
    OP
       2016-04-24 22:23:37 +08:00 via Android
    @pynix 你是说 python 标准库??好像没有解析 sql 语句的
    aiver
        10
    aiver  
       2016-04-25 09:01:47 +08:00
    你这已经不叫解析 sql 语句了,你想解析的是 sql 里面的字段,还不如自己写了提取
    SmiteChow
        11
    SmiteChow  
       2016-04-25 17:59:36 +08:00
    @xuyuheng0905 sqlalchemy 不会去解析 raw sql 的,连更底层的 mysql - python 都不会,解析 sql 语句是在 server 端完成的
    xuyuheng0905
        12
    xuyuheng0905  
       2016-04-25 21:59:06 +08:00
    刚下班,想问一下,你想做什么功能呢?
    faketemp
        13
    faketemp  
    OP
       2016-04-25 23:12:05 +08:00 via Android
    @xuyuheng0905 从某 oracle 系统导出好多 excel 文件(数量还会增加,数据来源别处不是自己导的),格式是 sheet2 的 A1.value 就是本工作簿数据来源 SQL ,现在想统计出每个工作簿数据都对应使用了 oracle 数据库中的哪些表——所以才想从每个工作簿中取出 sql 语句,从 sql 语句中解析出来表名、字段名等信息
    不知道我有没有说明白…
    xuyuheng0905
        14
    xuyuheng0905  
       2016-04-26 22:43:58 +08:00
    @faketemp 也就是说,你要读取这些 SQL ,然后做分析, SQL 的语法分析?之前看过一篇 blog ,有个人干过这个事情。 http://zh.lucida.me/blog/on-learning-algorithms/ ,这方面没有研究过,但是我觉得你可以从这个思路开始入手。
    faketemp
        15
    faketemp  
    OP
       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
        16
    faketemp  
    OP
       2016-04-27 07:27:54 +08:00
    @xuyuheng0905 我终于找到了几近完美的解决方案,遗憾的是官方没有提供 python 库
    看看这里 http://www.sqlparser.com/products.php
    ![]( http://i4.piimg.com/1c82d93d3877bfb5.png)
    xuyuheng0905
        17
    xuyuheng0905  
       2016-04-27 08:03:33 +08:00 via iPhone
    @faketemp 不错!
    sizeoftank
        18
    sizeoftank  
       2016-04-27 16:37:42 +08:00
    我用 Python Lex-Yacc 撸过一个~ 用在目前公司项目里后闭源了 - -
    vvvvxxxx
        19
    vvvvxxxx  
       2018-08-30 09:29:25 +08:00
    请问楼主这个问题解决了吗,因为最近也要解析 sql 语句获取表名,没有什么思路,希望楼主能给个方向
    moon1223
        20
    moon1223  
       2020-02-26 15:20:21 +08:00
    同问楼主,这个问题解决了吗,因为最近也要解析 sql 语句获取表名,没有什么思路,希望楼主能给个方向
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2579 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 04:33 · PVG 12:33 · LAX 20:33 · JFK 23:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.