如何用Python替换部分列字符串SQLite3
我有一个数据库,由于导入不当,在特定列中有一些有问题的字符,我想用正确的字符替换它们 例如,我想将如何用Python替换部分列字符串SQLite3,python,python-3.x,sqlite,replace,Python,Python 3.x,Sqlite,Replace,我有一个数据库,由于导入不当,在特定列中有一些有问题的字符,我想用正确的字符替换它们 例如,我想将“替换为”,如果在表数据的列
“
替换为”
,如果在表数据的列
的字符串中找到它
我使用以下代码无效:
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
提前谢谢
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
这里的问题是您打印的第一列是英文
,而替换实际上发生在结果集的第二列
如果更新以下行以查找索引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,'"','"');
您希望它更新数据库中的数据还是仅在检索时更新?如果要更新数据库中的数据,需要运行
update
sql语句,而不是SELECT
。我希望更新数据库中的数据。因此,我尝试了你所说的,使用UPDATE我得到了一个错误:c.execute(sql)sqlite3.OperationalError:near“,”:syntax error虽然现在我遇到了另一个问题,但我无法替换以下的英语=replace(英语,';,”);我找不到一种方法,如何在没有错误代码的情况下将“输入”解决方案:我发现您可以将“作为一行中的两个单引号”“”“谢谢您的回答。”。虽然现在我正努力用“好像我把”来代替',但我得到了意外的令牌错误。
UPDATE
Data
SET
English = REPLACE(English,'"','"');