2017-05-28 65 views
0

我有一個包含一個表(學生)的數據庫(student.db)。
學生的每一行都包含(ID,FName,LName)。
有一個現有的行(0,John,Doe)。

我希望能夠輸入一個變量作爲全名,在數據庫中找到該名稱,並刪除該行。



這就是我想出了...但它似乎不工作:Python SQLite3查詢連接兩個值

import sqlite3  

conn = sqlite3.connect('student.db') 
c = conn.cursor() 

selection = "John Doe" 

c.execute('DELETE FROM Students WHERE (FName + " " + LName =?', (selection,)) 

我沒有得到一個錯誤信息。我猜這是因爲它沒有找到任何匹配WHERE子句的條目。

有沒有一種方法來正確編寫一個WHERE子句,它包含了感興趣的行中的多個值?

我對此很新,所以我很抱歉如果這是一個愚蠢的問題。我正在嘗試創建一個Kivy應用程序,該應用程序創建學生名稱的ListView。然後,您可以從列表中選擇一名學生,然後單擊「刪除」從ListView詞典和數據庫中刪除該學生。

+0

嗯,這裏超級簡單的方法也只是分裂'約翰Doe'兩個,並在查詢中使用'和'。那會讓你超過第一個障礙,但我認爲它可能會在稍後導致問題,因爲名字是非常難以使用的(有些人有一個名字,有些可能有5個等)。在你的例子中,「John Doe」的真正來源是什麼? – roganjosh

+0

是否要將選定內容推送到'FName:Joe'和'LName:Doe',然後在查詢中使用它? – olisch

+0

我不想做分裂的唯一原因是因爲你的名字可能有「Mary Ann」這樣的名字......這可能會導致問題。 名稱「John Doe」來自Python字典。該字典當前被設置爲全名的列表。我敢肯定,字典可以修改,但我試圖按照我發現的Kivy的教程潤色 https://youtu.be/dxXsZKmD3Kk?list=PLGLfVvz_LVvTn3cK5e6LjhgGiSeVlIRwt – JED

回答

1

對於串聯,大多數SQL實現使用'||'運營商。請參閱SQLite docs

c.execute("DELETE FROM Students WHERE (FName || ' ' || LName = ?", (selection,))

0

Working with names is difficult但我想我是在過度思考你的問題。假設您只想查詢兩個字段,則可以將該名稱拆分爲first_namelast_name,並從滿足該組合的數據庫中刪除。

selection = "John Doe" 
first_name, last_name = selection.split() 

query = """ 
     DELETE FROM Students 
     WHERE FName = ? AND LName = ? 
     """ 

c.execute(query, (first_name, last_name)) 
conn.commit() 
+0

我不想使用的唯一原因selection.split()是因爲您可以使用名爲「Mary Ann Robinson」的名稱,其中Mary Ann是「名字」 – JED

+0

在這種情況下,您如何期望查詢處理該情況? – roganjosh

+0

@JED您可以更容易地存儲這些數據。我應該等待我的評論的答案。如果數據來源是數據庫本身(然後在屏幕上報告),那麼這不是問題。 – roganjosh