Psicopg2 mapping Python: “list of dicts” para Postgres: “array of composite type” para uma instrução INSERT

Versão do Postgres: 9.1.x.

Digamos que eu tenha o seguinte 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[]
);

E eu desejo executar a seguinte inserção, mostrada em SQL, mas do Python Psycopg2.

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

Qual é a sintaxe para conseguir isso (sem loops e tal). Tenho certeza que é possível desde odocumentação diz "Alterado na versão 2.4.3: suporte adicionado para matriz de tipos compostos". A documentação só mostra exemplos deSELECT afirmações.

Nota: Eu tenho uma lista de dicts no meu código de cliente que mapeiam conceitualmente para o esquema do psuedo acima.

editar:

Hmm, eu devo ter perdido isso da documentação:"A adaptação das tuplas do Python para tipos compostos é automática e não requer registro no adaptador.". Agora, para descobrir a parte da matriz.

edição 2:

psycopg2's%s espaço reservado deve funcionar quando o tipo de dados transmitido élist(tuple) oulist(dict). Tenho que testar: D

edit3: Ok, quase lá, os dicts não funcionam neste cenário, listas fazem e tuplas fazem. No entanto, preciso converter a representação da cadeia de tupla no tipo de registro composto.

Este :

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))

Cria a seguinte string:

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

Qual produz o seguinte erro:

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

questionAnswers(1)

yourAnswerToTheQuestion