跳轉至

腳本開發 / 連接器對象 DFF.CONN / PostgreSQL

PostgreSQL 連接器操作對象主要提供一些操作 PostgreSQL 的方法。 本連接器兼容以下數據庫:

  • Greenplum Database
  • 阿里雲 PolarDB for PostgreSQL
  • 阿里雲分析型數據庫 (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) 執行原始查詢 SQL,不經過 DFF.SQL(...) 構造
.non_query_raw(sql, sql_params=None) 執行原始非查詢 SQL,不經過 DFF.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 已經由可信代碼完整構造時,才使用原始 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