Python sqlite3 select from语句在获取时返回空列表

Python sqlite3 select from语句在获取时返回空列表,python,sqlite,pygtk,Python,Sqlite,Pygtk,我正在用pygtk编写一个以sqlite作为数据库后端的程序,我已成功创建了一个表和六列的数据库,使用: cur.execute('''CREATE TABLE IF NOT EXISTS tabl ( Id INTEGER PRIMARY KEY, Name TEXT, Condition TEXT, Medicine TEXT, Age TEXT, Date DATE)''') 我使用以下方法将值插入其中: de

我正在用pygtk编写一个以sqlite作为数据库后端的程序,我已成功创建了一个表和六列的数据库,使用:

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并获得正确的列表, 但是当尝试使用其他列(如condition)时,它返回一个空列表[],尽管它打印了正确的索引并看到了正确的列,但我感到困惑,请帮助。

编辑:编辑了有关使用
游标的不正确信息。execute()

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

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


您还可以使用
dict
将if…else块压缩为单个语句。(这是python实现switch…case语句的方法,在其他语言中也可以找到。)

或者更紧凑地说:

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])
编辑:编辑了有关使用
cursor.execute()
的错误信息

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

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


您还可以使用
dict
将if…else块压缩为单个语句。(这是python实现switch…case语句的方法,在其他语言中也可以找到。)

或者更紧凑地说:

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])

非常感谢,sqliteman非常有帮助,错误在T列表中,它将年龄列与条件列混洗,问题已解决:)。非常感谢,sqliteman非常有帮助,错误在T列表中,它将年龄列与条件列混洗,问题已解决:)。