所以我想更新一个表,我必须更改特定列的内容。对于更新的值,我需要使用RegEx。幸运的是,我的数据库是MariaDB,因此它具有REGEXP_REPLACE支持。
现在,我编写了一个Python脚本,应该这样做:获取字符串列表(比如说单词),如果列值以其中一个字符串开头,则删除它。 SQL查询基本上应该是这样的:
Excel_3
即。我正在做一个不区分大小写的匹配,其中一个特定的字符串(由REGEXP_REPLACE(column, '(?i)^(%s\\s+)', '');
指定)后跟任意数量的空格出现在列值的开头。
现在,当我尝试将其放入脚本时,我遇到了几个问题,具体取决于我如何将参数注入查询。
使用字符串插值 我知道这不是首选方法,但这是它的样子:
%s
当我使用此功能时,sql = "UPDATE `table` SET `column` = REGEXP_REPLACE(`column`, '(?i)^(%s\\\\s+)', '');" % (term)
cursor.execute(sql)
会正确插入(我使用term
检查),但如果print(cursor.mogrify(sql, (term,)))
包含任何必须在其中转义的字符,则会遇到问题正则表达式,例如term
。
使用带参数的执行这是更干净的选项,但我在这里遇到另一个问题 - 插入字符串包括引号。这打破了整个声明,因为它也有引号。所以这是代码:
-
但是这导致了这样的陈述:
sql = "UPDATE `table` SET `column` = REGEXP_REPLACE(`column`, '(?i)^(%s\\\\s+)', '');"
cursor.execute(sql, (term,))
在正则表达式中带引号的字符串也在引号中。
我有什么建议可以解决这个问题吗?我需要在没有引号的正则表达式中包含替换术语,但如果替换术语中有任何特殊字符,则必须对其进行转义。也许我需要为此编写一个单独的函数,但我不确定。我在Python和SQL中都不是很先进。
提前感谢任何提示。