从sql中查找表

问题描述 投票:0回答:1

有没有办法只通过查看SQL来查找表。可能正在使用python或其他工具。

例如

 SELECT *
          FROM TABLEA TFR
          JOIN TABLEB TR
            ON (TFR.DIMENSIONID = TR.DIMENSIONID)
         WHERE TFR.DAYCD >= TO_CHAR(TO_DATE('02/18/2019', 'MM/dd/yyyy'), 'YYYYMMDD')
           AND TFR.DAYCD <= TO_CHAR(TO_DATE('02/20/2019', 'MM/dd/yyyy'), 'YYYYMMDD')
           AND TFR.DURATIONTYPEID IN ('1')
         GROUP BY TFR.DAYCD, TR.DIMENSION, TR.ORDERID

我们想从中提取TABLEA , TABLEB。我尝试过https://sqlparse.readthedocs.io/en/latest/但它不起作用。

函数在https://github.com/andialbrecht/sqlparse/blob/master/examples/extract_table_names.py以下是代码

sql='''

SELECT *
          FROM TABLEA TFR
          JOIN TABLEB TR
            ON (TFR.DIMENSIONID = TR.DIMENSIONID)
         WHERE TFR.DAYCD >= TO_CHAR(TO_DATE('02/18/2019', 'MM/dd/yyyy'), 'YYYYMMDD')
           AND TFR.DAYCD <= TO_CHAR(TO_DATE('02/20/2019', 'MM/dd/yyyy'), 'YYYYMMDD')
           AND TFR.DURATIONTYPEID IN ('1')
         GROUP BY TFR.DAYCD, TR.DIMENSION, TR.ORDERID


'''
extract_tables(sql)
python
1个回答
0
投票

这是一个可以帮助您的代码。我们的想法是检查sqlparse.sql.Identifier类实例的解析输出。

import sqlparse
sql='''

SELECT *
          FROM TABLEA TFR
          JOIN TABLEB TR
            ON (TFR.DIMENSIONID = TR.DIMENSIONID)
         WHERE TFR.DAYCD >= TO_CHAR(TO_DATE('02/18/2019', 'MM/dd/yyyy'), 'YYYYMMDD')
           AND TFR.DAYCD <= TO_CHAR(TO_DATE('02/20/2019', 'MM/dd/yyyy'), 'YYYYMMDD')
           AND TFR.DURATIONTYPEID IN ('1')
         GROUP BY TFR.DAYCD, TR.DIMENSION, TR.ORDERID
'''
parsed = sqlparse.parse(sql)[0]

for x in parsed.tokens:
    # Loop and find out instances of Identifier
    if isinstance(x, sqlparse.sql.Identifier):
        print(x)
© www.soinside.com 2019 - 2024. All rights reserved.