用于查找 SQL 语句的 Python 正则表达式并将其转换为 Redshift 表达式

标签 python mysql regex

我编写了一个 python 脚本,它使用 python re 模块检测具有固定选择和多个 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 查询编写的正则表达式

IF EXISTS\n(\nSELECT 1\nFROM INFORMATION_SCHEMA.TABLES\n.删除表 (.)\nGO

每当我使用正则表达式在 python 脚本中得到此类查询时,它应该用 BYE 替换它,并且它应该获取表名称

WHERE Table_Name = **'Cycle_YYYYMM_BankBB'**

这是用于替换此内容的 SQL 查询

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

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

当我尝试运行它时,正则表达式有时未检测到该语句。请帮助解决上述特定语句的正则表达式。

最佳答案

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

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

关于用于查找 SQL 语句的 Python 正则表达式并将其转换为 Redshift 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51377580/

相关文章:

python - 名称 'net_input' 未定义,即使它在全局中

SQL - 如何用单个 future 日期时间替换一系列日期时间?

java - 使用正则表达式拆分 SQL Select 语句

java - 使用android从字母数字字符串中提取数字

python - 如何将列表中的n个数字一一输入?

Python Selenium 从 Angular JS 下拉列表中选择选项

MySQL composite unique on FK's

php - laravel - 使用查询生成器将对象数组插入表中的最有效方法

javascript - 从关键字集中获取奇数的正则表达式

python - 在 Pelican 中从文件名自动生成标题