コンテンツにスキップ

スクリプト開発 / コネクターオブジェクト DFF.CONN / PostgreSQL

PostgreSQL コネクター操作オブジェクトは、PostgreSQL を操作するためのメソッドを主に提供します。 このコネクターは以下のデータベースと互換性があります:

  • Greenplum Database
  • Alibaba Cloud PolarDB for PostgreSQL
  • Alibaba Cloud 分析型データベース (ADB) PostgreSQL 版

DFF.CONN(...) のパラメータは以下のとおりです:

パラメータ 必須 / デフォルト値 説明
connector_id str 必須 コネクター ID
database str None データベースを指定

.query(...)

SQL文を実行し、list[dict] 形式のクエリ結果を返します。パラメータは以下のとおりです:

パラメータ 必須 / デフォルト値 説明
sql str 必須 SQL文。パラメータプレースホルダを含むことができます。
? はエスケープが必要なパラメータを表します。
?? はエスケープが不要なパラメータを表します
sql_params list None SQLパラメータ
サンプル
1
2
3
sql = 'SELECT * FROM ?? WHERE seq > ?'
sql_params = ['demo', 1]
result = db.query(sql, sql_params=sql_params)

.non_query(...)

書き込み、更新、削除などのSQL文を実行し、影響を受けた行数を返します。パラメータは .query(...) と同じです。

サンプル
1
2
3
sql = 'DELETE FROM ?? WHERE id = ?'
sql_params = ['demo', 1]
affected_rows = db.non_query(sql, sql_params=sql_params)

.query(...).non_query(...) は、実行が成功すると自動的にトランザクションをコミットします。実行に失敗すると自動的にロールバックし、例外をスローします。

ヘルパーメソッド

メソッド 説明
.query_raw(sql, sql_params=None) DFF.SQL(...) を経由せずに raw クエリSQLを実行します
.non_query_raw(sql, sql_params=None) DFF.SQL(...) を経由せずに raw 非クエリSQLを実行します
.format_sql(sql, sql_params=None, pretty=False) 最終的なSQL文字列を生成します。デバッグに適しています
.tables() 現在のデータベースのテーブル名の一覧を返します
.create_sql_builder(raw_sql=None) SQL Builderを作成します

通常の動的SQLでは、.query(...) または .non_query(...)sql_params を優先して使用してください。SQLが信頼できるコードによって完全に構築されている場合にのみ、raw SQLメソッドを使用してください。

トランザクション

同じトランザクション内で複数のSQLを実行する必要がある場合は、以下のメソッドを使用します:

メソッド 説明
.start_trans() トランザクションを開始し、トランザクション接続オブジェクトを返します
.trans_query(trans_conn, sql, sql_params=None) トランザクション内でクエリを実行し、list[dict] を返します
.trans_non_query(trans_conn, sql, sql_params=None) トランザクション内で非クエリSQLを実行し、影響を受けた行数を返します
.commit(trans_conn) トランザクションをコミットし、トランザクション接続を閉じます
.rollback(trans_conn) トランザクションをロールバックし、トランザクション接続を閉じます
サンプル
1
2
3
4
trans_conn = db.start_trans()
db.trans_non_query(trans_conn, 'UPDATE ?? SET status = ? WHERE id = ?', ['demo', 'done', 1])
rows = db.trans_query(trans_conn, 'SELECT * FROM ?? WHERE id = ?', ['demo', 1])
db.commit(trans_conn)

トランザクション実行中に例外が発生した場合は、.rollback(trans_conn) を呼び出してください。同じトランザクション接続オブジェクトは、コミットまたはロールバックが完了した後は使用できません。

動的SQL文

query(...)non_query(...) は、内部で DFF.SQL(...) を使用してSQL文を構築し、複雑な動的SQL文の構築をサポートします。

例えば、WHERE IN (...) の値の数が不定の場合や、INSERT INTO ... VALUES ... によるデータの一括書き込みなどです。

詳細は スクリプト開発 / SQL構築 DFF.SQL を参照してください。