0

以下のコードで次のエラーを解決する方法。このアプリケーションは、mysqldbデータベースから名前と電話番号を取得するPython電話アプリケーションです。エラーが発生する行は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()db.use_result()完全なドキュメントはこちらを参照してください)。ただし、それは使用し_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)

お役に立てば幸いです。

于 2012-08-18T00:03:37.923 に答える