Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLParse-类似通配符条件的问题_Python_Sql Like_Identifier_Sql Parser - Fatal编程技术网

Python SQLParse-类似通配符条件的问题

Python SQLParse-类似通配符条件的问题,python,sql-like,identifier,sql-parser,Python,Sql Like,Identifier,Sql Parser,我将重点放在SQL语句的Where子句上,并试图收回Where子句中使用的所有列。下面是一个SQL示例: sql_2 = """Select PERS_ID , STF_NO , NAME FROM TEST T WHERE T.JOIN_DT >= T.POSTING_DT' AND T.PERS_ID LIKE '%123%' AND T.LEAVE_DT BETWEEN CURRENT_DATE - 20 AND CURRENT_DATE - 1&

我将重点放在SQL语句的Where子句上,并试图收回Where子句中使用的所有列。下面是一个SQL示例:

sql_2 = """Select
PERS_ID
, STF_NO
, NAME 
FROM 
TEST T

WHERE T.JOIN_DT >= T.POSTING_DT'
AND T.PERS_ID LIKE '%123%'
AND T.LEAVE_DT BETWEEN CURRENT_DATE - 20 AND CURRENT_DATE - 1"""
我期望的列是T.JOIN\u DT、T.POSTING\u DT、T.PERS\u ID和T.LEAVE\u DT。下面的代码可以提取除T.PERS_ID以外的所有代码

from __future__ import print_function
import re
import sqlparse 
import numpy as np
from sqlparse.sql import IdentifierList, Identifier, Function, Where, Parenthesis, TokenList, Comparison, Operation
from sqlparse.tokens import Keyword, DML, Punctuation

sql_2 = """Select
    PERS_ID
    , STF_NO
    , NAME 
    FROM 
    TEST T
    
    WHERE T.JOIN_DT >= T.POSTING_DT'
    AND T.PERS_ID LIKE '%123%'
    AND T.LEAVE_DT BETWEEN CURRENT_DATE - 20 AND CURRENT_DATE - 1"""

parsed = sqlparse.parse(sql_2)[0]

where_columns = []
full_columns = []

for item in parsed.tokens:
    if isinstance(item, Where):

        
        for condition in item.tokens:
            
            if isinstance(condition, Identifier):
                where_columns.append(condition.get_parent_name())
                where_columns.append(condition.get_real_name())
                full_columns.append(where_columns)
                where_columns = []
        
                       
            if isinstance(condition, Comparison):
                for breakdown in condition.tokens:
                    if isinstance(breakdown, Identifier):
                        where_columns.append(breakdown.get_parent_name())
                        where_columns.append(breakdown.get_real_name())
                        full_columns.append(where_columns)
                        where_columns = []
                              

print(full_columns)
它似乎将像“%123”这样的“和p.PERS_ID”组合成一个令牌,我不确定如何进一步分解它以获得标识符p.PERS_ID。如果在item中的条件的
之后添加
print(condition)
。令牌:
您将明白我的意思