有没有办法只通过查看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)
这是一个可以帮助您的代码。我们的想法是检查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)