Python正则表达式,用于查找SQL语句并将其转换为红移表达式

2024-04-16 15:56:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个python脚本,它使用pythonre模块检测具有固定select和多个and子句的特定SQL查询。下面是我为这个查询编写的正则表达式

下面是存储在python变量中的SQL查询

code=""" IF EXISTS
    (
    SELECT 1
    FROM INFORMATION_SCHEMA.TABLES
    WHERE Table_Name = 'Cycle_YYYYMM_BankBB'
    AND Table_Catalog = 'XXNORMDBNAMEXX'
    AND Table_Schema = 'dbo'
    AND Table_Type = 'BASE TABLE'
    )

    DROP TABLE XXNORMDBNAMEXX.dbo.Cycle_YYYYMM_BankBB
    GO"""

这是我为这种SQL查询编写的正则表达式

如果存在\n(\n从信息\u SCHEMA.TABLES中选择1\n。删除表()\n非政府组织

每当我在python脚本中使用正则表达式得到这种类型的查询时,它应该用BYE替换它,并且应该得到表名

WHERE Table_Name = **'Cycle_YYYYMM_BankBB'**

下面是用于替换此

re.sub(r'IF EXISTS\n\(\nSELECT 1\nFROM INFORMATION_SCHEMA.TABLES\n','bye', code, flags=re.IGNORECASE)

在用bye替换查询之后,它还应该从上面的查询中获取表名

当我尝试运行它时,正则表达式有时检测不到该语句。请帮助用正则表达式来表示上述特殊语句


Tags: andname脚本tablessqlifinformationschema
1条回答
网友
1楼 · 发布于 2024-04-16 15:56:11

原因可能有很多,但其中一个可能是空间:

re.sub(r'IF EXISTS\n\(\nSELECT 1\nFROM 

SQL在\n后面有空格

....SELECT 1
....FROM INFORMATION_SCHEMA.TABLES
....WHERE Table_Name = 'Cycle_YYYYMM_BankBB'

你可以用\s*选择它们,就像这样

re.sub(r'IF EXISTS\n\s*\(\n\s*SELECT 1\n\s*FROM

相关问题 更多 >