如何用Python替换String SQLite3列的一部分

我有一个数据库,该数据库的某些列中的字符有误(由于导入不正确),我想用适当的字符替换它们。

例如,我想将"替换为",只要在表数据的列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

谢谢。

benchimajun 回答:如何用Python替换String SQLite3列的一部分

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.sql
English
a&quot;b&quot;c&39;x&39;
d&quot;e&quot;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,'&quot;','"');
本文链接:https://www.f2er.com/3132124.html

大家都在问