psycopg2 mapeando Python: "lista de dictados" a Postgres: "matriz de tipo compuesto" para una instrucción INSERT

Versión de Postgres: 9.1.x.

Digamos que tengo el siguiente esquema:

DROP TABLE IF EXISTS posts CASCADE;
DROP TYPE IF EXISTS quotes CASCADE;

CREATE TYPE quotes AS
(
  text  CHARACTER VARYING,
  is_direct CHARACTER VARYING
);

CREATE TABLE posts
(
    body  CHARACTER VARYING,
    q     quotes[]
);

Y deseo realizar la siguiente inserción, que se muestra en SQL, pero desde Python Psycopg2.

insert into posts(body,q) VALUES('ninjas rock',ARRAY[ ROW('I AGREE',True)::quotes, ROW('I DISAGREE',FALSE)::quotes ]);

¿Cuál es la sintaxis para lograr esto (sin bucles y tal)? Estoy seguro de que es posible ya que lala documentación dice "Cambiado en la versión 2.4.3: se agregó soporte para la matriz de tipos compuestos". La documentación solo muestra ejemplos deSELECT declaraciones

Nota: Tengo una lista de dictados en el código de mi cliente que se asignan conceptualmente al esquema psuedo anterior.

editar:

Hmm debo haberme perdido esto de la documentación:"En su lugar, la adaptación de las tuplas de Python a los tipos compuestos es automática y no requiere registro de adaptador".. Ahora para averiguar la parte de la matriz.

edición 2:

psycopg2's%s el marcador de posición debería funcionar cuando el tipo de datos pasado eslist(tuple) olist(dict). Tengo que probarlo: D

edit3: Ok, casi allí, los dictados no funcionan en este escenario, las listas no y las tuplas. Sin embargo, necesito convertir la representación de la cadena de tupla en el tipo de registro compuesto.

Esta :

quote_1 = ("monkeys rock", "False")
quote_2 = ("donkeys rock",  "True")
q_list = [ quote_1, quote_2]
print cur.mogrify("insert into posts VALUES(%s,%s)", ("animals are good", q_list))

Crea la siguiente cadena:

insert into posts VALUES('animals are good',ARRAY[('monkeys rock', 'false'), ('donkeys rock', 'true')])

Que produce el siguiente error:

psycopg2.ProgrammingError: column "q" is of type quotes[] but expression is of type record[]

Respuestas a la pregunta(1)

Su respuesta a la pregunta