Home > Enterprise >  Why my code gives error: "sqlite3.OperationalError: no such column: "?
Why my code gives error: "sqlite3.OperationalError: no such column: "?

Time:10-25

Why is my program giving me error indicating that that column does not exist in my Sqlite3 Tasks-table? Here is my code:

class Db:

    conn = sqlite3.connect('database.db')
    cursor = conn.cursor()

    def create_table(self):
        create_Tasks_table = '''CREATE TABLE Tasks (
                    id INTEGER PRIMARY KEY,
                    title TEXT NOT NULL,
                    notes TEXT,
                    deadline TEXT, 
                    state INTEGER);'''
        self.cursor.execute(create_Tasks_table)
        self.conn.commit()


    def add_task(self, title, notes, deadline):
        state = 0
        add_to_Tasks_table = """INSERT INTO Tasks (title, notes, deadline, state) values (?, ?, ?, ?), (title, notes, deadline, state)"""
        self.cursor.execute(add_to_Tasks_table)
        self.conn.commit()

if __name__ == "__main__":
    db = Db()
    db.create_table()
    db.add_task("title1", "Note1", "2021-10-30 18:00:00")

I checked with DB Browser for SQlite that table is created correctly and column name is correct, as indicated on this picture: enter image description here

EDIT: Here is full error:

Traceback (most recent call last):
  File "C:\Users\User\PycharmProjects\project\mytest.py", line 91, in <module>
    db.add_task("title1", "Note1", "2021-10-30 18:00:00")
  File "C:\Users\User\PycharmProjects\project\mytest.py", line 36, in add_task
    self.cursor.execute(add_to_Tasks_table)
sqlite3.OperationalError: no such column: title

CodePudding user response:

The problem with your code is that you included the tuple that contains the parameters that you pass inside the sql statement.
It should be placed as the 2nd argument of cursor.execute():

def add_task(self, title, notes, deadline):
    state = 0
    add_to_Tasks_table = "INSERT INTO Tasks (title, notes, deadline, state) values (?, ?, ?, ?)"
    self.cursor.execute(add_to_Tasks_table, (title, notes, deadline, state))
    self.conn.commit()
  • Related