Как заменить часть столбца String SQLite3 на Python - PullRequest
0 голосов
/ 09 ноября 2019

У меня есть база данных с некоторыми проблемными символами в определенном столбце из-за неправильного импорта, и я хочу заменить их на нужные.

Например, я хочу заменить " на ", где бы он ни находился в строке в столбце 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, replace(English,\ `'"` \',\'"\') FROM Data

Он ставит \ перед каждым ' и я не знаю, нормальное ли это поведение. В любом случае, я не получаю замену символов, но если я запускаю ту же самую точную команду непосредственно в sqlite3, она вносит изменения просто отлично.

Я использую Python 3.7.5

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2019

Проблема здесь в том, что вы печатаете первый столбец, который является 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,'"','"');
0 голосов
/ 09 ноября 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...