2012-02-29 100 views
1

我在PyGTK中编写一个程序使用SQLite作为后台数据库,我已经成功地创建了数据库一桌六列使用空单:的Python SQLITE3从语句select返回时,取出

cur.execute('''CREATE TABLE IF NOT EXISTS tabl (
       Id INTEGER PRIMARY KEY, Name TEXT, Condition TEXT, Medicine TEXT, 
       Age TEXT, Date DATE)''') 

我插入值使用:

def save(Name, Age, Condition, Medicine): 
     T = [(Name).title(),(Age).title(),(Condition).title(),(Medicine).title()] 
     conn = sqlite3.connect('patients.db') 
     cur = conn.cursor() 
     conn.text_factory = str 
     cur.execute('INSERT INTO tabl (Name,Condition,Medicine, Age,Date) VALUES (?,?,?,?,date("now"))',(T)) 

值由GUI提供。

现在我在搜索对话框中有一个组合框,用于指定搜索哪种类型(名称,年龄,日期或条件),因此我使用了所选项目的索引,这是主要模块:

def find(self,widget): 
      index = self.comboBy.get_active() 
      nameU = self.entryFor.get_text() 
      name = nameU.title() 
      names = database.findItem(name,index) 

和这里的database.FindItem:

namen = name.title() 
    if index == 0: 
      print index 
      cur.execute("SELECT * FROM tabl WHERE Name=?",[namen]) 
    elif index == 1: 
      print index 
      cur.execute("SELECT * FROM tabl WHERE Age=?",[namen]) 
    elif index == 2: 
      print index 
      cur.execute("SELECT * FROM tabl WHERE Date=?",[namen]) 
    else: 
      print index 
      cur.execute("SELECT * FROM tabl WHERE Condition=?",[namen]) 
    list = cur.fetchall() 
    print list 
    return list 

供应名称时只适用,它打印索引0和得到正确的名单, 但与其他一些列尝试时例如条件,但它返回一个空的列表[]它打印正确的索引并看到右栏,我很困惑,请帮忙。

回答

1

编辑:编辑了关于使用cursor.execute()的错误信息。

您是否尝试过直接对数据库运行SQL查询(不使用Python?)您的问题可能是查询,或者确实没有与您的查询匹配的数据。

SQLiteMan是直接操作SQLite数据库的好工具。


您还可以使用dict将if ... else块缩减为单个语句。 (这是为了实现一个开关...... case语句的Python的方式在其他语言中。)

queries = { 0: "SELECT * FROM tab1 WHERE Name=?", 
      1: "SELECT * FROM tab1 WHERE Age=?", 
      2: "SELECT * FROM tab1 WHERE Date=?", 
      3: "SELECT * FROM tab1 WHERE Condition=?" } 
results = cur.execute (queries[index], [namen]) 

甚至更​​紧凑:

match_by = {0: 'Name', 1: 'Age', 2: 'Date', 3: 'Condition'} 
query = "SELECT * FROM tab1 WHERE %s=?" % match_by[index] 
results = cur.execute(query,[namen]) 

甚至紧凑,可以内联词典:

query = "SELECT * FROM tab1 WHERE %s=?" % {0: 'Name', 1: 'Age', 2: 'Date', 3: 'Condition'}[index] 
results = cur.execute(query,[namen]) 

还是最终紧凑的一行

results = cur.execute("SELECT * FROM tab1 WHERE %s=?" % {0: 'Name', 1: 'Age', 2: 'Date', 3: 'Condition'}[index] ,[namen]) 
+0

非常感谢你,sqliteman是如此的有用,错误是在T列表中,它随着条件列改变了Age列,问题解决了:)。 – Shokry 2012-02-29 15:48:24