使用Python处理Sqlite数据库中的新行字符“\ n”?

时间:2013-09-22 09:24:06

标签: python sqlite

我有一个名为test.db的Sqlite数据库,它包含两个结构如下的表:

表1:ID INTEGER PRIMARY KEY AUTOINCREMENT,名称varchar(500),颜色varchar(500)

表2:ID INTEGER PRIMARY KEY AUTOINCREMENT,Name varchar(500),Smell varchar(500)

我正在尝试使用以下代码连接两个表

con = sqlite3.connect('test.db') 
with con: 
  cur = con.cursor()
  cur.execute("SELECT Color, Smell FROM Table1, Table2 WHERE Table1.Name = Table2.Name") 

但是,我失败了,因为Table1.Name插入了不可见的换行符“\ n”,而Table2.Name则没有,所以WHERE子句不起作用。

有没有办法稍微修改SELECT语句,以便Table1.Name = Table2.Name可以工作?或者我必须重新生成Table1以删除“\ n”,但我不知道如何?

2 个答案:

答案 0 :(得分:3)

使用replace() SQL函数:

cur.execute("SELECT Color, Smell FROM Table1, Table2 "
            "WHERE replace(Table1.Name, '\n', '') = Table2.Name") 

您可以更新整个Table Name列,以完全删除换行符:

cur.execute("UPDATE Table1 SET Name = replace(Name, '\n', '') "
            "WHERE Name like '%\n%'")

答案 1 :(得分:0)

您应该做的第一件事是修复表格,以便数据适合您的应用程序。您的表格Apple\n列中似乎有name这样的数据。

运行此查询以修复您的表:

UPDATE Table1 SET Name = rtrim(Name,'\n')

这将从每行\n列的值右侧删除所有Name,然后更新该行。

编辑:   @Martijn的答案将允许您的查询工作(假设您没有Table2.Name的相同问题),但您应该真正修复表中的数据,以便您不必记住执行这些变通办法每次。