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

psycopg2に挿入された複数の行のIDを取得する

    executemanyから結果を取得できるはずはありません :

    この関数は、データベースを更新するコマンドで最も役立ちます。クエリによって返された結果セットはすべて破棄されます。

    psycopg2のドキュメントによる。

    単一のinsertをループする方がよいでしょう。 トランザクション内、または複数値のinsert... returningを使用する 、後者の場合、別の入力値を使用して返されたIDを一致させるように注意する必要がありますが、返されたIDの順序が入力のVALUESと同じであると単純に想定することはできません。 リスト。

    テストをローカルで実行すると、失敗します:

    >>> import psycopg2
    >>> conn = psycopg2.connect("dbname=regress")
    >>> curs = conn.cursor()
    >>> curs.execute("create table my_table(id serial primary key, field_1 integer, field_2 integer);")
    >>> data = [(0, 0), (0, 0)]
    >>> curs.executemany(
    ...     "INSERT INTO my_table (field_1, field_2) "
    ...     "VALUES (%s, %s) RETURNING id;",
    ...     data
    ... )
    >>> 
    >>> curs.fetchall()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    psycopg2.ProgrammingError: no results to fetch
    

    psycopg22.5.1でテスト済み。



    1. Coalesce()がSQLiteでどのように機能するか

    2. SQLiteの英数字を含む行を返す

    3. 複合PRIMARYKEYは、関連する列にNOTNULL制約を適用します

    4. Kubernetes AWSでのJenkinsの使用、パート2