Python psycopg2 no se inserta en la tabla postgresql

Estoy usando lo siguiente para intentar insertar un registro en una tabla de base de datos postgresql, pero no funciona. No recibo ningún error, pero no hay registros en la tabla. ¿Necesito un commit o algo? Estoy utilizando la base de datos postgresql que se instaló con la instalación de djangostack de Bitnami.

import psycopg2 try: conn = psycopg2.connect("dbname='djangostack' user='bitnami' host='localhost' password='password'") except: print "Cannot connect to db" cur = conn.cursor() try: cur.execute("""insert into cnet values ('r', 's', 'e', 'c', 'w', 's', 'i', 'd', 't')""") except: print "Cannot insert" 

Si no desea tener que confirmar cada entrada en la base de datos, puede agregar la siguiente línea:

 conn.autocommit = True 

Entonces tu código resultante sería:

 import psycopg2 try: conn = psycopg2.connect("dbname='djangostack' user='bitnami' host='localhost' password='password'") conn.autocommit = True except: print "Cannot connect to db" cur = conn.cursor() try: cur.execute("""insert into cnet values ('r', 's', 'e', 'c', 'w', 's', 'i', 'd', 't')""") except: print "Cannot insert" 

Resulta que necesitaba conn.commit() al final

psycopg2 es psycopg2 Python DB API , por lo que la función de confirmación automática está desactivada de forma predeterminada. conn.commit llamar a conn.commit para confirmar cualquier transacción pendiente en la base de datos. Como las conexiones (y los cursores) son administradores de contexto, simplemente puede usar la instrucción with para confirmar / deshacer automáticamente una transacción al salir del contexto:

 with conn, conn.cursor() as cur: # start a transaction and create a cursor cur.execute(sql) 

De los documentos :

Cuando una conexión sale del bloque with , si el bloque no ha generado ninguna excepción, la transacción se confirma. En caso de excepción, la transacción se retrotrae.

Cuando un cursor sale del bloque with , se cierra, liberando cualquier recurso eventualmente asociado con él. El estado de la transacción no se ve afectado.