Re: How to use "WHERE NOT EXISTS in INSERT STATEMENT" - Mailing list psycopg

From Jonathan Rogers
Subject Re: How to use "WHERE NOT EXISTS in INSERT STATEMENT"
Date
Msg-id 56C85D53.1010707@socialserve.com
Whole thread Raw
In response to How to use "WHERE NOT EXISTS in INSERT STATEMENT"  (Serge Christian Ibala <christian.ibala@gmail.com>)
List psycopg
On 02/19/2016 03:00 PM, Serge Christian Ibala wrote:
> Hello All,
>
> I want to insert some data in my data base (postgrsql) using Python but
> i want to check first that the row does not already exist.
> The normal command is:
>
> cur.execute("INSERT INTO COMPANYLIST (ID, NAME, AGE, ADDRESS, SALARY) \
> VALUES (1, 'Paul', 32, 'California', 20000.00)");
>
>
> I get the error below when running the code twice.
>
> ===================================================
>
> *psycopg2.IntegrityError: duplicate key value violates unique constraint
> "companylist_pkey" DETAIL: Key (id)=(1) already exists.*
>
> ====================================================
>
>
> I have tried to replace it by:
>
> cur.execute("INSERT INTO COMPANYLIST (ID, NAME, AGE, ADDRESS, SALARY) \
> WHERE NOT EXISTS (SELECT 1 FROM table WHERE id='1')\
> VALUES (1, 'Paul', 32, 'California', 20000.00)");
>
>
> It does not work. Can anybody please help?

This is really a SQL question rather than a psycopg2 question. You
didn't explain what you mean by "It does not work." However, it's easy
to see that you've passed bad SQL syntax to Postgres. When
troubleshooting, you need to understand the difference between an error
originating from Postgres and one originating from psycopg2. In this
case, you should have seen a psycopg2.ProgrammingError, which means the
error came from Postgres.

Read the Postgres docs to understand your SQL syntax error and how to
fix it:

http://www.postgresql.org/docs/9.2/static/sql-insert.html

If you are using Postgres 9.5, you may be able to use the brand new ON
CONFLICT clause to get the effect you want.

--
Jonathan Rogers
Socialserve.com by Emphasys Software
jrogers@emphasys-software.com


psycopg by date:

Previous
From: Serge Christian Ibala
Date:
Subject: How to use "WHERE NOT EXISTS in INSERT STATEMENT"
Next
From: Daniele Varrazzo
Date:
Subject: Re: PQntuples for older version (2.2.1) of psycopg2 with ctypes