lucians
lucians

Reputation: 2269

Insert values from list into table (Python, sqlite3)

I have this simple code which I can't make work.

import sqlite3

conn = sqlite3.connect('db\\books')
c = conn.cursor()

col = []

title = input('title')
text = input('text')
tags = input('tags')

col.append(title)
col.append(text)
col.append(tags)

c.executescript("INSERT INTO books (title,text,tags) "
                "VALUES (col[0],col[1],col[2])")

The db code (connection and normal insert) works but the problem rise when I want to do what you see above.

The goal I would like to achieve is to let the user insert the data into db (all strings). I don't know if this is the right way to do this...

How can I do this ?

Thanks

Upvotes: 0

Views: 4780

Answers (2)

sjw
sjw

Reputation: 6543

One option is to change your last line to:

c.execute("INSERT INTO books (title,text,tags) VALUES (?,?,?)", (col[0], col[1], col[2]))

And then commit and close the connection if you're done making changes:

conn.commit()
conn.close()

Upvotes: 3

adrtam
adrtam

Reputation: 7241

This line:

c.executescript("INSERT INTO books (title,text,tags) "
                "VALUES (col[0],col[1],col[2])")

Is not a valid SQL. Now since c is defined as a cursor, you can run execute from it directly instead of executescript, which the latter is suppose to create a cursor from a connection and execute a SQL. Just replace that line with the following should work:

c.execute("INSERT INTO books (title,text,tags) "
          "VALUES (?,?,?)", col)

The SQL above uses a "qmark style" placeholder, which takes actual value from the parameter list that follows it.

Upvotes: 3

Related Questions