连接到mysqldb时出错

时间:2012-08-17 22:50:49

标签: mysql-python

如何解决以下代码中的以下错误。该应用程序是一个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()

1 个答案:

答案 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)

希望有所帮助!