2013-09-22 75 views
0

我有一個名爲test.db的SQLite數據庫,其中包含與這樣的結構兩個表:使用Python處理Sqlite數據庫中的新行字符「 n」?

表1:ID INTEGER PRIMARY KEY AUTOINCREMENT,名稱爲varchar(500),顏色爲varchar(500)

表2: ID INTEGER PRIMARY KEY AUTOINCREMENT,名稱爲varchar(500),嗅覺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有invisibl插入新行字符「\ n」,而Table2.Name不行,所以WHERE子句不起作用。

有沒有辦法修改SELECT語句一點點,以便Table1.Name = Table2.Name將工作?或者我必須重新生成Table1以刪除「\ n」,但我不知道如何?

+0

換句話說,表中的數據不正確?不要在你的代碼中修改數據庫;你會在後面遇到大量麻煩(第20次有什麼問題?)。修復數據庫的唯一方法就是這樣做。你的數據模型也有點奇怪...... – Ben

回答

3

使用replace() SQL函數:

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

您可以更新整個TableName柱完全消除換行符:

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

你應該做的第一件事就是解決您的表,以便數據對於您的應用程序是正確的。看起來您的表格的name列中有像Apple\n這樣的數據。

運行此查詢解決您的表:

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

將從各行的Name列的值的右側刪除所有\n,然後更新該行。

編輯: @ Martijn的回答將允許您的查詢工作(假設您沒有與Table2.Name相同的問題),但您應該真正修復表中的數據,以便您不必記住每次都做這些解決方法。

相關問題