Python MySQLdb 面向对象
Posted
技术标签:
【中文标题】Python MySQLdb 面向对象【英文标题】:Python MySQLdb Object Oriented 【发布时间】:2018-06-12 01:40:49 【问题描述】:我正在尝试使用 Python 与 mysql 数据库建立连接
在树莓派上。我是面向对象的python的新手。在这段代码中,我是
将值作为输入并尝试将其插入数据库。到期的
对于某些问题,插入查询没有被执行,并且
Exception
部分正在执行。请帮助我识别我的
错误。
import tkinter as tk
import MySQLdb
class ImgComp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self,width=320, height=209)
container.pack(side="top")
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
container.grid_propagate(False)
try:
self.db = MySQLdb.connect("localhost","root","root","sample")
self.c= self.db.cursor()
except:
print ("I can't connect to MySql")
self.frames =
for F in (InputPage):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(InputPage)
def show_frame(self, cont):
frame = self.frames[cont]
if ((cont == PageOne) | (cont == InputPage) | (cont == OutputPage)):
self['menu'] = frame.menubar
else:
self['menu'] = ''
frame.tkraise()
def input_submit(self, input_value):
in_val = float(input_value)
self.sql = "INSERT INTO input_delay_master (input_delay) VALUES (%s)"
try:
c.execute(self.sql,(in_val))
self.db.commit()
except:
print("Except")
self.db.rollback()
class InputPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.menubar = tk.Menu()
filemenu = tk.Menu(self.menubar, tearoff=0)
filemenu.add_command(label="Output Reset Delay", command=lambda: controller.show_frame(OutputPage))
self.menubar.add_cascade(label="Settings", menu=filemenu)
label = tk.Label(self, text="Input Image Delay")
label.pack(pady=10,padx=10)
input_delay = tk.Entry(self)
input_delay.pack(pady=10)
submit1 = tk.Button(self, text = "Submit", command=lambda: controller.input_submit(input_delay.get()))
submit1.pack()
我得到以下输出
34.56 # This is the the value I entered in Entry field
Except
问题是,input_submit
按钮内的插入查询没有被执行,而是Expection
部分被执行。请帮助我找到成功执行插入查询的方法。
【问题讨论】:
试打印里面试调试 我试过了,它没有被执行,直接除了部分被执行 对于测试代码删除try/except
,您将看到带有有用信息的错误消息(而不是无用的"Except"
)。或者至少使用except Exception as ex: print(ex)
。
我不确定,但可能execute
在查询中期望?
而不是(%s)
。
除了可能期望元组或带参数的列表(即使您只有一个参数)-但(in_val)
不是元组,它是单个元素,要创建元组,您需要在(in_val, )
内使用逗号
【参考方案1】:
except
期望 tuple
带有参数 - 即使你只有一个参数 - 但 (in_val)
不是元组,它是单个元素。要创建tuple
,您需要在(in_val, )
中使用逗号
【讨论】:
以上是关于Python MySQLdb 面向对象的主要内容,如果未能解决你的问题,请参考以下文章