0

如何解决以下代码中的以下错误。该应用程序是一个 python 电话应用程序,它从 mysqldb 数据库中检索姓名和电话号码。给我错误的行是 phoneList = c.fetchrows()。我非常感谢您的帮助。

AttributeError:“NoneType”对象没有属性“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()
4

1 回答 1

0

所以主要原因是它db.query不会返回任何东西 - 你必须使用db.store_result()or (请参阅此处db.use_result()的完整文档)。然而,这是使用- 我们将在这个例子中使用:_mysqlMySQLdb

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)

希望有帮助!

于 2012-08-18T00:03:37.923 回答