我试图读取SQL键值中的值,即UPDATE、SET、FROM和WHERE。使用regex,我可以得到值,直到where子句后面的第一行,但无法得到完整的where子句。请建议一下。
需要从其中获取值的示例SQL。
UPDATE dbname.tablename
SET
alias1=T1.col1,
alias2=T1.col2
FROM datafabric_cfd_dea.T1 T1
WHERE
tablename.keycol =T1.keycol
AND tablename.col3='ABC'
AND T1.col3='ABC'
AND tablename.col3=T1.col3
AND T1.col2='XYZ';Regex:
UPDATE\s*(.*)\s*SET\s*(.*)\s*FROM\s*(.*)\s*WHERE\s*(.*)请建议一下。
发布于 2018-12-04 03:32:35
我不认为正则表达式是最合适的工作工具。当我们在Python生态系统中运行时,我们很幸运能够在PyPI上使用大量第三方软件包的强大功能。有一个名为sqlparse的流行包,它实现了一个SQL解析器。
您可以解析SQL语句并分析解析的令牌:
In [1]: import sqlparse
In [2]: sql = """ UPDATE dbname.tablename
...: SET
...: alias1=T1.col1,
...: alias2=T1.col2
...: FROM datafabric_cfd_dea.T1 T1
...: WHERE
...: tablename.keycol =T1.keycol
...: AND tablename.col3='ABC'
...: AND T1.col3='ABC'
...: AND tablename.col3=T1.col3
...: AND T1.col2='XYZ';"""
In [3]: parsed_sql = sqlparse.parse(sql)
# get the where clause
In [4]: where_clause = next(token for token in parsed_sql[0].tokens
if isinstance(token, sqlparse.sql.Where))
In [5]: where_clause.tokens
Out[5]:
[<Keyword 'WHERE' at 0x10FCD1A78>,
<Newline ' ' at 0x10FCD1668>,
<Whitespace ' ' at 0x10FCD1B48>,
<Comparison 'tablen...' at 0x10FCCDB50>,
<Newline ' ' at 0x10FCD1AE0>,
...
<Comparison 'T1.col...' at 0x10FCCDD50>,
<Punctuation ';' at 0x10FCF5EF0>]https://stackoverflow.com/questions/53605214
复制相似问题