6

I have the following code to insert do an insert into my postgresql database

conn = psycopg2.connect("my connection setting are in here")
cur = conn.cursor()
cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%i, \"%s\", \"%s\", \"%s\")' % (1441, "concert", item['title'], item['artists'] )) 

However when I run this I get the following error:

psycopg2.ProgrammingError: column "concert" does not exist
LINE 1: ...(location_id, catname, title, name) VALUES (1441, concert, "...

But "concert" is not a column it is a value so I dont understand why I am getting this error.

EDIT - I have tried putting \" round the value concert and tried without

How can I get my data inserted with out getting this error?

1 Answer 1

14

You really, really shouldn't use python string formatting to build queries - they are prone to SQL injection. And your actual problem is that you use " for quoting while you have to use ' for quoting (" quotes table/column names etc, ' quotes strings).

Use the following code instead:

cur.execute('INSERT INTO src_event (location_id, catname, title, name) VALUES (%s, %s, %s, %s)', (1441, 'concert', item['title'], item['artists']))

Note that you have to use %s no matter what type you actually have.

Also see http://initd.org/psycopg/docs/usage.html#query-parameters.

Sign up to request clarification or add additional context in comments.

2 Comments

Thanks, that gets rid of that that error but now I get exceptions.TypeError: int argument required. The only one of the fields that should be an int is catname and it is an int.
You have to use %s for all values, even the int one. I've had it incorrect at the beginning and then edited my answer. You might have copied the incorrect code.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.