在python中用双引号替换单引号,以便与insert into database一起使用

Sup*_*ero 0 python insert

想知道是否有人有一个聪明的解决方案来修复Python中的错误插入语句,由一个不那么聪明的程序导出.它没有为字符串中的单引号添加两个单引号.为了使它更容易插入所有值都是字符串.

所以它有:

INSERT INTO addresses VALUES ('1','1','CUCKOO'S NEST','CUCKOO'S NEST STREET');
Run Code Online (Sandbox Code Playgroud)

代替:

INSERT INTO addresses VALUES ('1','1','CUCKOO''S NEST','CUCKOO''S NEST STREET');
Run Code Online (Sandbox Code Playgroud)

显然有多行,我也不想替换封闭的单引号.

考虑使用拆分和连接,但我不确定如何在循环中循环时轻松更新拆分值.对不起,我是个菜鸟.像下面的东西,我不知道如何做#update位

import sys

fileIN = open('a.sql', "r")
line = fileIN.readline()

while line:
   bits = line.split("','")
   for bit in bits:
      if bit.find("'") > -1:
         #update bit
   line_out = "','".join(bits)      
   sys.stdout.write(line_out)
   line = fileIN.readline()
Run Code Online (Sandbox Code Playgroud)

谢谢

Dun*_*can 5

根据katrielalex的建议,这个怎么样:

>>> import re
>>> s = "INSERT INTO addresses VALUES ('1','1','CUCKOO'S NEST','CUCKOO'S NEST STREET');"
>>> def repl(m):
    if m.group(1) in ('(', ',') or m.group(2) in (',', ')'):
        return m.group(0)
    return m.group(1) + "''" + m.group(2)

>>> re.sub("(.)'(.)", repl, s)
"INSERT INTO addresses VALUES ('1','1','CUCKOO''S NEST','CUCKOO''S NEST STREET');"
Run Code Online (Sandbox Code Playgroud)

如果你进入负面的后瞻性断言,这是令人头痛的诱导纯正则表达式版本:

re.sub("((?<![(,])'(?![,)]))", "''", s)
Run Code Online (Sandbox Code Playgroud)