sql >> データベース >  >> RDS >> PostgreSQL

psycopg2マッピングPython:dictのリストから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.
    

    案の定、匿名配列のタイプがquotes[]であることをPgに伝えます トリックを行います:

    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. MySQLのselectステートメントで条件をどのように記述しますか?

    2. mysqlテーブルに存在しない値を取得する

    3. SQLServerの一時テーブルの概要

    4. mysqlレプリケーション(TokuDBレプリカ):テーブル'database.table'の列Xをタイプ'varchar(Y)'からタイプ'varchar(Y)'に変換できません