紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

Python3+Psycopg2を使ってsequenceを取得する #Python3 #PostgreSQL9.6

やりたいこと

Python3で、PostgreSQLのsequenceを使った処理を書きたい

実行環境

  • PostgreSQL9.6.6
  • Python3.6
  • psycopg2.7.4

検証用シーケンス

CREATE SEQUENCE "schema"."table_name_id_seq"
INCREMENT 1
START 1
NO MAXVALUE
NO MINVALUE
NO CYCLE
CACHE 1
OWNED BY "schema"."table_name"."id"
;

実装例

try:
  conn = psycopg2.connect(
    host=rds_host,
    database=rds_database,
    port=rds_port,
    user=rds_user,
    password=rds_password
  )
except:
  logger.error("ERROR: Unexpected error: Could not connect to PostgreSQL instance.")
  sys.exit()

with conn.cursor() as cur:
  id = cur.execute("SELECT NEXTVAL('schema.table_name_id_seq')")
  print("sequenceの値:" + str(id))

発生したエラー

NG。取得したシーケンスの値がNoneになってしまう。

sequenceの値:None

対処

cur.executeした後に、cur.fetchoneを使う。

fetchone() クエリの現在行から1行取得し、次の行へ移動。FETCH NEXTに相当。

cur.execute("SELECT NEXTVAL('schema.table_name_id_seq')")
id = cur.fetchone()
print("sequenceの値:" + str(id))

実行結果は以下の通り。シーケンスの値が取得できるようになった。

sequenceの値:(8,)

参考情報