使用带有字符串参数的REGEXP_REPLACE的PyMysql(更新mariaDB的查询)

时间:2017-04-06 11:17:36

标签: python mysql regex mariadb pymysql

所以我想更新一个表,我必须更改特定列的内容。对于更新的值,我需要使用RegEx。幸运的是,我的数据库是MariaDB,因此它具有REGEXP_REPLACE支持。

现在,我编写了一个Python脚本,应该这样做:获取字符串列表(比如说单词),如果列值以其中一个字符串开头,则删除它。 SQL查询基本上应该是这样的:

Excel_3

即。我正在做一个不区分大小写的匹配,其中一个特定的字符串(由REGEXP_REPLACE(column, '(?i)^(%s\\s+)', ''); 指定)后跟任意数量的空格出现在列值的开头。

现在,当我尝试将其放入脚本时,我遇到了几个问题,具体取决于我如何将参数注入查询。

  1. 使用字符串插值 我知道这不是首选方法,但这是它的样子:

    %s

    当我使用此功能时,sql = "UPDATE `table` SET `column` = REGEXP_REPLACE(`column`, '(?i)^(%s\\\\s+)', '');" % (term) cursor.execute(sql) 会正确插入(我使用term检查),但如果print(cursor.mogrify(sql, (term,)))包含任何必须在其中转义的字符,则会遇到问题正则表达式,例如term

  2. 使用带参数的执行这是更干净的选项,但我在这里遇到另一个问题 - 插入字符串包括引号。这打破了整个声明,因为它也有引号。所以这是代码:

    -

    但是这导致了这样的陈述:

    sql = "UPDATE `table` SET `column` = REGEXP_REPLACE(`column`, '(?i)^(%s\\\\s+)', '');"
    cursor.execute(sql, (term,))
    

    在正则表达式中带引号的字符串也在引号中。

  3. 我有什么建议可以解决这个问题吗?我需要在没有引号的正则表达式中包含替换术语,但如果替换术语中有任何特殊字符,则必须对其进行转义。也许我需要为此编写一个单独的函数,但我不确定。我在Python和SQL中都不是很先进。

    提前感谢任何提示。

0 个答案:

没有答案