Por padrão, o psycopg2 inicia as transações para você automaticamente, o que significa que você precisa dizer a ele para confirmar. Observe que
commit
é um método de connection
, não o cursor
. conn = psycopg2.connection('...')
cur = conn.cursor()
cur.execute("...")
conn.commit()
A intenção é que você possa agrupar várias instruções em uma única transação, para que outras consultas não vejam alterações pela metade, mas também por motivos de desempenho.
Observe também que você deve sempre usar espaços reservados, em vez de concatenar strings.
Por exemplo:
cur.execute("INSERT INTO im_entry.test (colname) VALUES (%s)", [p])
Caso contrário, você corre o risco de tornar possíveis ataques de injeção de SQL.