Python mysql错误

Python mysql错误,python,mysql,Python,Mysql,我有这些代码,我只是简单地获取一些输入,并尝试将这些数据存储在mysql数据库中。数据库已连接,但在执行时似乎发生了一些错误。程序似乎在不使用函数的情况下工作,因此我假设函数中存在一些问题。我是python新手,任何帮助都将不胜感激 from tkinter import * import mysql.connector import mysql.connector.cursor class Register(): def __init__(self,master): frame =

我有这些代码,我只是简单地获取一些输入,并尝试将这些数据存储在mysql数据库中。数据库已连接,但在执行时似乎发生了一些错误。程序似乎在不使用函数的情况下工作,因此我假设函数中存在一些问题。我是python新手,任何帮助都将不胜感激

from tkinter import *
import mysql.connector
import mysql.connector.cursor


class Register():
def __init__(self,master):
    frame = Frame(master)
    frame.grid()

#MySql Connection
    self.host = 'localhost'
    self.database = 'python_mysql'
    self.user = 'root'
    self.password = 'sparsha'
    self.db = mysql.connector.connect(self.host,self.database,self.user,self.password)



  #Labels
    self.lbl1 = Label(frame,text = "Name")
    self.lbl3 = Label(frame,text = "Email")
    self.lbl4 = Label(frame,text = "Tolerance")

    self.lbl1.grid(row = 0, column =0, sticky = W)
    self.lbl3.grid(row = 2, column =0, sticky = W)
    self.lbl4.grid(row = 3, column =0, sticky = W)

   #Entry
    self.txt1 = Entry(frame)
    self.txt2 = Entry(frame)
    self.txt3 = Entry(frame)

    self.txt1.grid(row = 0, column =1)
    self.txt2.grid(row = 2, column =1)
    self.txt3.grid(row = 3, column =1)

    #Button
    self.btn1=Button(frame,text = "Submit",command=self.btn1submit)
    self.btn1.grid()

def btn1submit(self):
    print("Button clicked")
    user_data = ("INSERT INTO user_data(Name, Email, Tolerance) "
           "VALUES (%s, %s, %s)")
    value = (self.txt1.get(),self.txt2.get(),self.txt3.get())
    print(value)
    # Insert new data
    self.cursor = self.db.cursor()
    self.cursor.execute(user_data, value)
    self.db.commit()
    self.cursor.close()
    self.db.close()

root = Tk()
c = Register(root)
root.mainloop()
执行时,错误如下所示:

File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "C:/Users/Sparsha/PycharmProjects/untitled/Graphical Password     Authentication/Register.py", line 50, in btn1submit
self.cursor = self.db.cursor()
File "C:\Python34\lib\site-packages\mysql\connector\connection.py", line 1383, in cursor
raise errors.OperationalError("MySQL Connection not available.")
mysql.connector.errors.OperationalError: MySQL Connection not available.
试试这个

user_data = "INSERT INTO user_data(Name, Email, Tolerance) VALUES ({0}, {1}, {2})".format(self.txt1.get(),self.txt2.get(),self.txt3.get())

print(user_data)
请打印并粘贴您的查询

execute应该是这样的

self.cursor.execute(user_data)
发生了一些非常奇怪的事情,请执行此操作以进行故障排除

cursor = self.db.cursor()
cursor.execute("SELECT Name from user_data")
rows = cursor.fetchone()
print(rows)

我用这些改进尝试了你的代码。它工作完美无瑕

from tkinter import *
import mysql.connector

class Register(object):
    def __init__(self, master):


        frame = Frame(master)
        frame.grid()

    #MySql Connection
        self.host = 'localhost'
        self.database = 'python_mysql'
        self.user = 'root'
        self.password = 'sparsha'
        self.db = mysql.connector.connect(host=self.host,database=self.database, user=self.user, password =self.password)
        self.cursor = self.db.cursor()


      #Labels
        self.lbl1 = Label(frame,text = "Name")
        self.lbl3 = Label(frame,text = "Email")
        self.lbl4 = Label(frame,text = "Tolerance")

        self.lbl1.grid(row = 0, column =0, sticky = W)
        self.lbl3.grid(row = 2, column =0, sticky = W)
        self.lbl4.grid(row = 3, column =0, sticky = W)

       #Entry
        self.txt1 = Entry(frame)
        self.txt2 = Entry(frame)
        self.txt3 = Entry(frame)

        self.txt1.grid(row = 0, column =1)
        self.txt2.grid(row = 2, column =1)
        self.txt3.grid(row = 3, column =1)

        #Button
        self.btn1=Button(frame,text = "Submit",command=self.btn1submit)
        self.btn1.grid()



    def btn1submit(self):
        print("Button clicked")
        user_data = ("INSERT INTO user_data(Name, Email, Tolerance) "
           "VALUES (%s, %s, %s)")
        value = (self.txt1.get(),self.txt2.get(),self.txt3.get())
        print(value)
        # Insert new data

        self.cursor.execute(user_data, value)
        self.db.commit()
        self.cursor.close()
        self.db.close()
root = Tk()
c = Register(root)
root.mainloop()
编辑
您也不需要导入mysql.connector.cursor

@YMartin,我认为这只是发布中的缩进问题。这两个“函数”显然都是该类的方法@用户-如果您删除了
import mysql.connector.cursor
行,会发生什么情况?@AlanHoover删除该行实际上会产生与我之前发布的错误完全相同的错误。没有变化我不知道它是否有用,但您是否尝试过使用其他MySQL数据库驱动程序,如
MySQLdb
?可能相关:您是否打算在按下按钮一次后关闭连接??程序正在接收输入,但未将其存储到数据库中。数据库已连接。我在没有类和函数的情况下尝试了同样的程序,效果非常好。它接受了我的输入,然后将其存储在数据库中。所以,连接没有问题。好的,很好。您可以进行打印(self.txt1.get())。它显示什么?print(self.txt1.get())显示第一个输入值。我不明白这里的问题。它一直显示self.cursor=self.db.cursor()的相同错误,如果我删除这一行及其下面的三行,则不会显示错误。啊!在类创建中创建游标。好东西!是的,是的。。。以及关键字参数的使用。在没有它们的情况下出现错误。你说的是什么关键字参数?我只是好奇。host=self.host?天啊!这是正确的。我很好奇他是怎么联系到tho的!奇怪,是的,没有他们,我就犯了这个错误
TypeError:\uuuu init\uuuuu()接受1个位置参数,但给出了5个
。我认为它们被称为关键字参数,不确定确切的术语。哇,谢谢!这实际上起了作用。另外,@FirebladeDan感谢您在这方面的投入!