Правильный синтаксис для обновления вставки вставки psycopg2 - PullRequest
0 голосов
/ 23 мая 2018

У меня есть таблица, которую я создал в postgresql:

> CREATE TABLE issuer(
>     cik                            char(10) NOT null     ,issuer_name                     char(150) NOT NULL    ,trading_symbol                 char(10) NOT
> NULL    ,SIC                            char(6) NOt NULL   
> ,date_added                     timestamp NULL DEFAULT
> CURRENT_TIMESTAMP    ,CONSTRAINT issuer_pk PRIMARY key (cik)    );

Я пытаюсь либо обновить строку, если она существует, либо вставить ее, если ее нет.

У меня естьискал документацию о том, как это сделать, но я сбит с толку ошибками, которые я получаю.

У меня есть функция, которую я вызываю

io = postgres_update_issuer(con,cur,cik,coname,ticker,'')

Когда я вызываю эту функцию, Python вызываетнить и затем выходит.Вот функция, которую я вызываю:

 def postgres_update_issuer(conn,cur,issuer_cik,name,ticker,sic):

            sql =   """
            INSERT INTO issuer ( cik,issuer_name,trading_symbol,SIC)
                  VALUES (%s,%s,%s,%s)
                     ON CONFLICT  (cik)
                     DO UPDATE SET
                        (issuer_name,trading_symbol,SIC )
                        = (EXCLUDED.issuer_name, EXCLUDED.trading_symbol,             EXCLUDED.SIC) 
                     ;"""


            try:
    #                 data = (issuer_cik,name,ticker,sic)
                    cur.execute(sql,(issuer_cik,name,ticker,sic) )
                    return True

            except (Exception, psycopg2.DatabaseError) as error:
                    print(error)

Когда я изменяю функцию на это, я получаю сообщение об ошибке «невозможно переместить все поля»:

 def postgres_update_issuer(conn,cur,issuer_cik,name,ticker,sic):

    sql =   """
    INSERT INTO issuer ( cik,issuer_name,trading_symbol,SIC)
          VALUES (%s)
             ON CONFLICT  (cik)
             DO UPDATE SET
                (issuer_name,trading_symbol,SIC )
                = (EXCLUDED.issuer_name, EXCLUDED.trading_symbol,             EXCLUDED.SIC) 
             ;"""


    try:
            data = (issuer_cik,name,ticker,sic)
            cur.execute(sql,(data )
            return True

    except (Exception, psycopg2.DatabaseError) as error:
            print(error)

Как правильносделать это.Я использую Python 3.6 psycopg2 и postgresql 10

...