我正在尝试从输入字段中获取数据并将其保存在数据库中。我在我的SQL查询中提到了6列,但我在数据库中还有一列是ID,它是自动递增的。当我运行此脚本时,我没有错误,但也没有数据插入到数据库而不是自动递增的ID。这是我的代码:
window=tkinter.Tk()
# Set the window title
window.title("Princedeep Singh")
window.geometry("500x400")
current_row = 0
# Set the current row to zero
refdate_label = Label(window, text="Enter value for date: ")
refdate_label.grid(row=current_row, column=0)
refdate_text = StringVar()
refdate_entry = Entry(window, textvariable=refdate_text)
refdate_entry.grid(row=current_row, column=1)
current_row += 1
# geogeo field
geo_t_label = Label(window ,text="Enter value for geo:")
geo_t_label.grid(row=current_row, column=0)
geo_t_text = StringVar()
geo_t_entry = Entry(window, textvariable=geo_t_text)
geo_t_entry.grid(row=current_row, column=1)
current_row += 1
# commod field
commod_label = Label(window, text="Enter value for commod:")
commod_label.grid(row=current_row, column=0)
commod_text = StringVar()
commod_entry = Entry(window, textvariable=commod_text)
commod_entry.grid(row=current_row, column=1)
current_row += 1
# vector
vector_label = Label(window, text="Enter value for vector:")
vector_label.grid(row=current_row, column=0)
vector_text = StringVar()
vector_entry = Entry(window, textvariable=vector_text)
vector_entry.grid(row=current_row, column=1)
current_row += 1
# commod field
coordinate_label = Label(window, text="Enter value for coordinate:")
coordinate_label.grid(row=current_row, column=0)
coordinate_text = StringVar()
coordinate_entry = Entry(window, textvariable=coordinate_text)
print(coordinate_text)
coordinate_entry.grid(row=current_row, column=1)
current_row += 1
value_label = Label(window, text="Enter value :")
value_label.grid(row=current_row, column=0)
value_text = StringVar()
value_entry = Entry(window, textvariable=value_text)
value_entry.grid(row=current_row, column=1)
current_row += 1
conn = mysql.connector.connect(host='localhost', db='postgres', user='root',
password='root')
cur = conn.cursor()
submit = Button(window, text='submit', command=cur.execute('INSERT INTO
record(refdate,geo,commod,vector,coordinate,value) VALUES (%s, %s,
%s, %s, %s,%s)',
(refdate_text.get(),geo_t_text.get(),commod_text.get()
,vector_text.get(),str(coordinate_text.get()),value_text.get() )))
submit.grid(row=current_row+1, column=4)
conn.commit()
window.mainloop()
答案 0 :(得分:0)
问题在于:
submit = Button(window, text='submit', command=cur.execute('INSERT INTO
record(refdate,geo,commod,vector,coordinate,value) VALUES (%s, %s,
%s, %s, %s,%s)',
(refdate_text.get(),geo_t_text.get(),commod_text.get()
,vector_text.get(),str(coordinate_text.get()),value_text.get() )))
submit.grid(row=current_row+1, column=4)
您在创建时调用了cur.execute(…)
,并将结果作为command
的{{1}}传递。
当然,在创建时,条目都是空的,因此您插入一个空行。
然后,Button
的结果不是函数,因此您存储为execute
的内容不是可以调用的内容,因此稍后单击该按钮不会执行任何操作,只需写入警告即可command
,你不是在看。
你需要创建一个函数(没有参数),你可以传递给stderr
- 这个函数在被调用时会为你做这个插入。例如:
command
如果您希望在一个巨大的表达式中完成所有操作,就像在旧代码中一样,您可以使用def on_submit():
cur.execute('INSERT INTO record blah blah blah' …, value_text.get()))
submit = Button(window, text='submit', command=on_submit)
代替lambda
,或使用def
,但是它可能会更加清晰。