想知道是否有人有一个聪明的解决方案来修复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)
谢谢
根据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)
| 归档时间: |
|
| 查看次数: |
3147 次 |
| 最近记录: |