TypeError:' accounts'对象不可迭代

时间:2017-12-27 15:59:15

标签: python tkinter peewee

enter image description here

我正在使用Tkinter和Peewee ORM编写脚本。我有:

db = SqliteDatabase('data.db')
introspector = Introspector.from_database(db)
models = introspector.generate_models()
cities_list = []
account_obj = models['accounts']
recordset= account_obj.select()
for r in recordset:
    city = str(r.city)
    elapsed_hours = (time.time()-int(r.datetime))/3600
    cities_list.append(str(r.city)+'-'+str(elapsed_hours))


master = tk.Tk()

variable = StringVar(master)
variable.set(cities_list[0]) # default value

w = OptionMenu(master, variable, *cities_list)
w.pack()

def ok():
    print ("value is:" + variable.get())
    v_list = variable.get().split('-')
    print type(account_obj)
    recordset = account_obj.select().where(account_obj.city.contains(v_list[0])).get()
    for r in recordset:
        r.datetime=int(time.time())
        r.update()


button = Button(master, text="OK", command=ok)
button.pack()

mainloop()

在第二个选择陈述中:

recordset = account_obj.select().where(account_obj.city.contains(v_list[0])).get()

我得到了:

Traceback (most recent call last):
<class 'peewee.BaseModel'>
  File "...lib\lib-tk\Tkinter.py", line 1542, in __call__
    return self.func(*args)
  File "... myscript.py", line 46, in ok
    for r in recordset:
TypeError: 'accounts' object is not iterable

我做错了什么?

1 个答案:

答案 0 :(得分:0)

应@Nae的请求这是我重新安排的工作代码:

master = tk.Tk()

variable = StringVar(master)
variable.set(cities_list[0]) # default value

w = OptionMenu(master, variable, *cities_list)
w.pack()

def ok():
    print ("value is:" + variable.get())
    master.destroy()

button = Button(master, text="OK", command=ok)
button.pack()

mainloop()

v_list = variable.get().split('-')
recordset = account_obj.select().where(account_obj.city.contains(v_list[0]))
for r in recordset:
    r.datetime = int(time.time())
    r.save()

问题原来是我从csv导入的表没有主键。一旦我添加了,save()就开始工作了。请参阅http://docs.peewee-orm.com/en/latest/peewee/querying.html#updating-existing-records