作者: | 来源:互联网 | 2023-09-12 16:33
我有一个数据库,该数据库的某些列中的字符有误(由于导入不正确),我想用适当的字符替换它们。
例如,我想将"
替换为"
,只要在表数据的列English
的字符串中找到它即可。
我使用以下代码无济于事:
cOnn= sqlite3.connect('Solutions.db')
c = conn.cursor()
sql = """SELECT English,replace(English,'"','"') FROM Data"""
c.execute(sql)
records = c.fetchall()
print("Total rows are: ",len(records))
print("Printing each row")
for row in records:
print(row[0])
print("\n")
conn.commit()
我在调试器中注意到sql =
行的翻译如下:
sql = SELECT English,\ `'"` \',\'"\') FROM Data
它在每个\
前面放置一个'
,但我不知道这是否是正常行为。
无论哪种方式,我都不会替换字符,但是如果我直接在sqlite3中运行相同的命令,那么所做的更改就很好了。
我正在使用Python 3.7.5
谢谢。
CREATE TABLE test(English);
INSERT INTO test(English) VALUES
("a"b"c"),("d"e"f");
.headers on
SELECT * from test;
.print Updating
UPDATE test SET English = replace(replace(English,""",""""),"&39;","'");
SELECT * from test;
$ sqlite3 English
a"b"c&39;x&39;
d"e"f
Updating
English
a"b"c'x'
d"e"f
,
这里的问题是您正在打印第一列English
,而替换实际上是在结果集的第二列中进行的。
如果更新以下行以查找索引1而不是0,则会得到正确的结果。
...
for row in records:
print(row[1]) # print the second column defined by your replace function.
print("\n")
...
但是,它仍然不会更新数据库中的实际数据,因为SELECT
仅查询数据,而REPLACE
对查询的数据副本执行。要更新数据库中的数据,您需要在数据库列上执行UPDATE
操作。
UPDATE
Data
SET
English = REPLACE(English,'"','"');