【发布时间】:2021-05-21 10:53:11
【问题描述】:
我正在尝试在 python 中找到一个正则表达式,它能够处理我从我的数据库中抛出的大多数 UPDATE 查询。我不能使用 sqlparse 或任何其他可能对此有用的库,我只能使用 python 的内置模块或 cx_Oracle,以防它有一个我不知道的方法可以做这样的事情。
大多数更新查询如下所示:
UPDATE TABLE_NAME SET COLUMN_NAME=2, OTHER_COLUMN=to_date('31-DEC-202023:59:59','DD-MON-YYYYHH24:MI:SS'), COLUMN_STRING='Hello, thanks for your help', UPDATED_BY=-100 WHERE CODE=9999;
我使用的大多数更新查询都有这些类型更新的版本。输出必须是一个列表,包括每个单独的 SQL 关键字(UPDATE、SET、WHERE)、每个单独的更新语句(即 COLUMN_NAME=2)和最终标识符(CODE=9999)。
理想情况下,结果应该是这样的:
list = ['UPDATE', 'TABLE_NAME', 'SET', 'COLUMN_NAME=2', 'OTHER_COLUMN=("31-DEC-2020 23:59:59","DD-MON-YYYY HH24:MI:SS")', COLUMN_STRING='Hello, thanks for your help', 'UPDATED_BY=-100', 'WHERE', 'CODE=9999']
最初我尝试在空格上使用string.split() 拆分来执行此操作,但是在处理像上面这样稍微复杂的查询之一时,split 方法不能很好地处理字符串更新,例如由于这些更新中有空格,我正在尝试在COLUMN_STRING 或OTHER_COLUMN 中制作一个。
【问题讨论】:
-
.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)")将按照此处的说明为您服务:answer -
@Younes 感谢您的回复。不幸的是,这个正则表达式不能很好地处理其中有逗号的日期值或字符串更新,因为它似乎在逗号上分割了一个字符串。此外,我不会在 UPDATE、SET、WHERE、关键字处拆分字符串。这意味着我最终在列表的 0 索引中得到一个
UPDATE TABLE_NAME SET COLUMN_NAME=2,我希望我的第 0 个索引是 UPDATE,第一个索引是 TABLE_NAME,等等。 -
啊我明白了,我会发布一个解决方法的答案,让你得到你想要的。
标签: python sql regex python-2.7 parsing