我正在使用sqlite作为数据库后端在pygtk中编写程序,我已成功使用一个表和六列创建数据库:
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并获取正确的列表, 但是当尝试使用其他一些列如条件时,它会返回一个空列表[],虽然它打印正确的索引并看到正确的列,但我很困惑,请帮忙。
答案 0 :(得分:1)
编辑:修改了有关使用cursor.execute()
的错误信息。
您是否尝试直接在数据库上运行SQL查询(不使用Python?)您的问题可能是查询,或者确实没有与您的查询匹配的数据。
SQLiteMan是直接操作SQLite数据库的好工具。
您还可以使用dict
将if ... else块压缩为单个语句。 (这是实现其他语言中的switch ... case语句的pythonic方法。)
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])
甚至 more compact,您可以内联字典:
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])