PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

psycopg2 съпоставяне Python:списък на dicts към Postgres:масив от съставен тип за оператор INSERT

Като увеличите малко усилията си, какво ще кажете за:

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::quotes[])", 
                  ("animals are good", q_list))
#
#                 added explicit cast to quotes[]->^^^^^^^^

Обяснение :

Ако стартирате:

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

директно в psql ще получите:

regress=# insert into posts 
regress-# VALUES('animals are good',ARRAY[
regress-#             ('monkeys rock', 'false'),
regress-#             ('donkeys rock', 'true')
regress-#  ]);
ERROR:  column "q" is of type quotes[] but expression is of type record[]
LINE 1: insert into posts VALUES('animals are good',ARRAY[('monkeys ...
                                                    ^
HINT:  You will need to rewrite or cast the expression.

Със сигурност казвате на Pg, че вашият анонимен масив е от тип quotes[] върши работа:

regress=# insert into posts 
regress-# VALUES('animals are good',ARRAY[
regress-#           ('monkeys rock', 'false'),
regress-#           ('donkeys rock', 'true')
regress-# ]::quotes[]);
INSERT 0 1

regress=# select * from posts;
       body       |                           q                            
------------------+--------------------------------------------------------
 animals are good | {"(\"monkeys rock\",false)","(\"donkeys rock\",true)"}
(1 row)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Подреждане по дата ASC с пролетни данни

  2. Прикачете дял LIST към съществуваща таблица в postgres 11

  3. максимална стойност по редове (от n колони) - Елегантен подход

  4. Разделете стойности, разделени със запетая, в целева таблица с фиксиран брой колони

  5. Не може да се експортира таблица на AWS RDS Postgres в CSV в S3, като се използва функцията aws_s3.query_export_to_s3