正则表达式在 Snoflake python 连接器中无法正常工作

Regular Expression not working as expected in Snoflake python connector

我写了一个查询,它将过滤掉所有不属于 (nnn)-nnn-nnnnn.

模式的 phone_no
select * 
from employee
where  not RLIKE(phone_no,'^\(\d{3}\)-\d{3}-\d{4}$');

当我直接在 Snowflake 控制台 中查询时,它给出了预期的结果。 但是当我使用 snowflake-connector-python 到 运行 相同的查询时,使用 python 它没有按预期工作。

        query="""
                INSERT  into   DEMO_DB.PUBLIC.EMPLOYEE_INTER_ATIF
                select * , 'Phone_No::Invalid Number'
                from DEMO_DB.PUBLIC.employee
                where  NOT  RLIKE(phone_no,'^\(\d{3}\)-\d{3}-\d{4}$');
        """
        cs.execute(query).

CS是我做的光标的名字。

这里有什么问题。

这里的问题是 Python 正在解释字符串文字(triple-quotes 中的文本)中的特殊字符(如反斜杠)字符串被呈现给 Snowflake。要指示 Python 不要这样做,请在开头 triple-quote 前加上 r,如下所示:

query=r"""
INSERT  into   DEMO_DB.PUBLIC.EMPLOYEE_INTER_ATIF
select * , 'Phone_No::Invalid Number'
from DEMO_DB.PUBLIC.employee
where  NOT  RLIKE(phone_no,'^\(\d{3}\)-\d{3}-\d{4}$');
"""

如果您像这样编写一个简单的 Python 脚本并执行它,您可以很容易地看出区别:

query="""
INSERT  into   DEMO_DB.PUBLIC.EMPLOYEE_INTER_ATIF
select * , 'Phone_No::Invalid Number'
from DEMO_DB.PUBLIC.employee
where  NOT  RLIKE(phone_no,'^\(\d{3}\)-\d{3}-\d{4}$');
"""
print(query)
query=r"""
INSERT  into   DEMO_DB.PUBLIC.EMPLOYEE_INTER_ATIF
select * , 'Phone_No::Invalid Number'
from DEMO_DB.PUBLIC.employee
where  NOT  RLIKE(phone_no,'^\(\d{3}\)-\d{3}-\d{4}$');
"""
print(query)

输出为:

INSERT  into   DEMO_DB.PUBLIC.EMPLOYEE_INTER_ATIF
select * , 'Phone_No::Invalid Number'
from DEMO_DB.PUBLIC.employee
where  NOT  RLIKE(phone_no,'^\(\d{3}\)-\d{3}-\d{4}$');


INSERT  into   DEMO_DB.PUBLIC.EMPLOYEE_INTER_ATIF
select * , 'Phone_No::Invalid Number'
from DEMO_DB.PUBLIC.employee
where  NOT  RLIKE(phone_no,'^\(\d{3}\)-\d{3}-\d{4}$');