AttributeError:“ str”对象没有属性“ cursor”

时间:2019-07-30 22:52:02

标签: python sqlite tkinter

我不知道怎么处理这个错误。我如何通过SQL语句而不会出现此错误?我只能对SQL语句使用引号,所以不能更改数据类型。

我试图将INSERT语句重新格式化无济于事。

class MD:    

    def __init__(self):
        self.conn = sqlite3.connect('Ex.db')
        self.cursor = self.conn.cursor()

        self.cursor.execute('''CREATE TABLE IF NOT EXISTS Exa (
                       Ex1 INTEGER PRIMARY KEY,
                       Ex2 TEXT NOT NULL,
                       );''')
        self.conn.commit()    

    def close(self):
        self.conn.close()
        self.cursor.close()

    def execute(self, exone, extwo):
        self.cursor.execute()    

    def fetchall(self):
        self.cursor.fetchall()

    def fetchone(self):
        self.cursor.fetchone()

    def commit(self):
        self.conn.commit()    

Ex1 = tk.StringVar
Ex2 = tk.StringVar
Entry = tk.Entry(textvariable=Ex1)
Entry1 = tk.Entry(textvariable=Ex2)
MD.execute('INSERT INTO INTO Exa(Ex1, Ex2) VALUES (?, ?)', exone=Ex1, extwo=Ex2)

错误是

Traceback (most recent call last):
  File "C:/Users/Josh/Downloads/Code/FurtherTest.py", line 42, in <module>
    MD.execute('INSERT INTO INTO Exa(Ex1, Ex2) VALUES (?, ?)', exone=Ex1, extwo=Ex2)
  File "C:/Users/Josh/Downloads/Code/FurtherTest.py", line 25, in execute
    self.cursor.execute()
AttributeError: 'str' object has no attribute 'cursor'

1 个答案:

答案 0 :(得分:1)

您在类(MD)上调用执行方法 ,该调用中的第一个参数将传递给self参数。由于第一个参数是字符串,因此会导致Exception。首先创建该类的实例:

...
md = MD()
md.execute('INSERT INTO INTO Exa(Ex1, Ex2) VALUES (?, ?)', exone=Ex1, extwo=Ex2)

通过在实例上调用方法,self参数将成为实例本身,并且INSERT字符串将传递给exone参数。