将pythongui链接到MySQL数据库

将pythongui链接到MySQL数据库,python,mysql-python,Python,Mysql Python,我是Python语言的nube,我很难将我的Python GUI(Tkinter)链接到数据库。布局是这样的,我希望最终用户通过Entry小部件向数据库添加名称。我尝试使用变量将文本保存到数据库中,例如: entr= Entry(frame1) entr.grid(row=0, column=1) var1=entr.get() def save(): """Save content in the entry box""" con = mdb.connect(host="lo

我是Python语言的nube,我很难将我的Python GUI(Tkinter)链接到数据库。布局是这样的,我希望最终用户通过Entry小部件向数据库添加名称。我尝试使用变量将文本保存到数据库中,例如:

entr= Entry(frame1)
entr.grid(row=0, column=1)

var1=entr.get()

def save():
    """Save content in the entry box"""
    con = mdb.connect(host="localhost", user="root", passwd="xxxxxx", db="xxxxxxx")
    with con:
        cur=con.cursor()
        sql_update= "UPDATE Tests SET NAME='%s' WHERE id='%s'", (var1, id)
        cur.execute(sql_update)
        cur.close()
        con.commit()
        con.close()
这将返回错误消息:

TypeError: query() argument 1 must be string or read-only buffer, not tuple
是否有任何方法可以将数据从条目小部件保存到数据库,而不必使用
var1=raw\u input(“Name:”)
其他地方

谢谢你抽出时间!:)

更换

    sql_update= "UPDATE Tests SET NAME='%s' WHERE id='%s'", (var1, id)
    cur.execute(sql_update)
带(首选)


如果您想知道为什么代码不起作用:将元组作为函数参数传递将作为单个参数传递;当
创建元组时,只有当元组不在函数声明/调用中时才会创建元组-在函数声明/调用中是参数分隔符

使用
*sql\u update
将元组解压为位置参数,使其再次工作。但是,由于您可能只是使用变量来缩短代码行,因此在调用
cur.execute()

Replace()时,只需将SQL字符串放入其中并内联创建元组

    sql_update= "UPDATE Tests SET NAME='%s' WHERE id='%s'", (var1, id)
    cur.execute(sql_update)
带(首选)


如果您想知道为什么代码不起作用:将元组作为函数参数传递将作为单个参数传递;当
创建元组时,只有当元组不在函数声明/调用中时才会创建元组-在函数声明/调用中是参数分隔符


使用
*sql\u update
将元组解压为位置参数,使其再次工作。但是,由于您可能只是使用变量来缩短代码行,因此在调用
cur.execute()

时,只需将SQL字符串放在其中并内联创建元组即可。谢谢您的回复。我尝试了你的方法,这次没有出错,所以我决定测试一下:我注意到
%s
周围的引号-你需要删除它们。dbapi将负责正确引用您的属性(或者在数据库支持的情况下单独传递它们),因此单独引用它们将导致问题。我尝试了您的方法,但这次没有出现错误,因此我决定使用cur.execute(“SELECT*FROM Tests”)rows=cur.fetchall()对其进行测试对于行中的行:打印行添加到数据库中的项目如下(1L,“”)(2L,“”)(3L,“”)(4L,“”)(5L,“”)所示,这意味着该变量存在问题。我知道这应该是显而易见的,但这是我引用var1=ent.get()的方式给出的输出吗?有没有其他方法可以从条目小部件获取文本?非常感谢您的帮助。请参阅我一分钟前的评论;这可能会破坏你的查询。有没有参考网站可以学习链接python GUI和MySQL查询?谢谢你的回复。我尝试了你的方法,这次没有出错,所以我决定测试一下:我注意到
%s
周围的引号-你需要删除它们。dbapi将负责正确引用您的属性(或者在数据库支持的情况下单独传递它们),因此单独引用它们将导致问题。我尝试了您的方法,但这次没有出现错误,因此我决定使用cur.execute(“SELECT*FROM Tests”)rows=cur.fetchall()对其进行测试对于行中的行:打印行添加到数据库中的项目如下(1L,“”)(2L,“”)(3L,“”)(4L,“”)(5L,“”)所示,这意味着该变量存在问题。我知道这应该是显而易见的,但这是我引用var1=ent.get()的方式给出的输出吗?有没有其他方法可以从条目小部件获取文本?非常感谢您的帮助。请参阅我一分钟前的评论;这可能会破坏你的查询。有没有参考网站来学习链接python GUI和MySQL查询?
    sql_update= "UPDATE Tests SET NAME=%s WHERE id=%s", (var1, id)
    cur.execute(*sql_update)