2014-12-05 55 views
0

我想做一個腳本,要求用戶輸入一個任務,然後將任務存儲在SQLite數據庫。我有一個問題讓我的刪除功能工作。另外,當我輸入一個新的任務,我必須封裝在引號中,以使其運行。Python的SQLite的ToDo腳本

import sqlite3 
import sys 

con = sqlite3.connect('taskmgr.db') 

def create_db(): 
    with con: 
     c.execute("DROP TABLE IF EXISTS ToDo") 
     c.execute("CREATE TABLE ToDo(Id int, Task char20, Due char20)") 

def select_task(): 
    with con: 
     cursor = con.execute("SELECT Id, Task, Due from ToDo") 
     for row in cursor: 
      print "Id:" ,row[0] 
      print "Task:" ,row[1] 
      print "Due:" ,row[2] 

def insert_task(): 
    with con: 
     print("New Task\n") 
     Id = input("Enter Id: ") 
     Task = input("Enter Task: ") 
     Due = input("Enter Due Date: ") 
     c.execute("INSERT INTO ToDo VALUES(?, ?, ?)", (Id, Task, Due)) 
     con.commit() 

def delete_record(): 
    with con: 
     print("Enter task Id to delete:") 
     user = int(input()) 
     c.execute("DELETE FROM ToDo WHERE Id=?",(user)) 

c = con.cursor()   
create_db() 

target= int(8) 
while target != 9: 
    target=int(input("\nGood Morning Curtis!\n \nSelect option:\n 1.New Task\n 2.Select Task\n 3.Delete Task\n 9.Quit\n\nUser: ")) 

    if target ==1: 
     insert_task() 

    elif target ==2: 
     select_task() 

    elif target ==3: 
     delete_record() 

    elif target ==9: 
     print("good bye") 
+0

是否有堆棧跟蹤?它沒有默默地做任何事情嗎? – quantumtremor 2014-12-05 02:50:37

回答

0

關於需要報價輸入,用於Python 2使用raw_input()代替input()

另一個問題是與execute語句,具體而言,參數化查詢的值需要是類型元組(或列表),但是,您傳遞一個整數值。嘗試將其更改爲這樣:

c.execute("DELETE FROM ToDo WHERE Id=?",(user,)) 

的原因是包裹在括號中有一個值不會創建一個元組:

>>> for user in 1, (1), (1,): 
...  print user, type(user) 
... 
1 <type 'int'> 
1 <type 'int'> 
(1,) <type 'tuple'> 

從上面可以看出,(1)仍然1,是鍵入int。包裝它在()沒有將其轉換爲元組。但是,(1,)是一個元組。或者,你可以傳遞參數列表,例如

c.execute("DELETE FROM ToDo WHERE Id=?",[user])