如何解决以下代码中的以下错误。该应用程序是一个python手机应用程序,它从mysqldb数据库中检索名称和电话号码。给我错误的行是phoneList = c.fetchrows()。非常感谢您的帮助。
#connecting to database
from Tkinter import *
import MySQLdb
db = MySQLdb.connect(host = "localhost", user = "xxxxxxx", passwd = "xxxxxxxx", db ="test")
# which item is selected
def whichSelected () :
print "At %s" % (select.curselection())
return int(select.curselection()[0])
# doing sql query
def dosql (cmd) :
print cmd
c = db.query(cmd)
setSelect ()
# the generation of new id numbers as new rows are inserted.
def addEntry () :
c = db.query("select max(id)+1 from phones")
id = c.fetchdict()[0].values()[0] # digs deep to get next id
dosql("insert into phones values (%d,'%s','%s')" % (id,nameVar.get(), phoneVar.get()))
#updating the entries
def updateEntry() :
id = phoneList[whichSelected()][0]
dosql("update phones set name='%s', phone='%s' where id=%d" %
(nameVar.get(), phoneVar.get(), id))
# deleting the entries
def deleteEntry() :
id = phoneList[whichSelected()][0]
dosql("delete from phones where id=%d" % id)
# loading the entries
def loadEntry () :
id, name, phone = phoneList[whichSelected()]
nameVar.set(name)
phoneVar.set(phone)
# building my windows
def makeWindow () :
global nameVar, phoneVar, select
win = Tk()
frame1 = Frame(win)
frame1.pack()
.
.
.
.
# the function "setSelect" which fills in our list control. Here, instead of importing the phone list, we simply use fetchrows to get the same list of lists.
def setSelect () :
global phoneList
c = db.query("select id,name,phone from phones order by name")
phoneList = c.fetchrows()
select.delete(0,END)
for id,name,phone in phoneList :
select.insert (END, name)
win = makeWindow()
setSelect()
win.mainloop()
答案 0 :(得分:0)
所以主要原因是db.query
没有返回任何内容 - 您必须使用db.store_result()
或db.use_result()
(请参阅完整文档here)。但是,这是使用_mysql
- 我们将在此示例中使用MySQLdb
:
def setSelect():
global phoneList
# You have your connection db set up, so now we make a cursor
c = db.cursor()
# Now execute your query using the cursor 'execute' method
c.execute("select id,name,phone from phones order by name")
# Now we pull the results from the query and store them in phoneList
phoneList = c.fetchall()
# And I know nothing about Tkinter, so hopefully the rest will work :)
select.delete(0,END)
# phoneList will represent each row as a tuple, so make sure to verify this part
for id,name,phone in phoneList :
select.insert (END, name)
希望有所帮助!