Lewati ke isi

Pengembangan Skrip / Objek Konektor DFF.CONN / PostgreSQL

Objek operasi Konektor PostgreSQL terutama menyediakan beberapa metode untuk mengoperasikan PostgreSQL. Konektor ini kompatibel dengan basis data berikut:

  • Greenplum Database
  • Alibaba Cloud PolarDB for PostgreSQL
  • Alibaba Cloud AnalyticDB (ADB) for PostgreSQL

Parameter DFF.CONN(...) adalah sebagai berikut:

Parameter Tipe Wajib / Nilai default Deskripsi
connector_id str Wajib ID Konektor
database str None Menentukan basis data

.query(...)

Menjalankan pernyataan SQL dan mengembalikan hasil kueri dalam format list[dict], dengan parameter sebagai berikut:

Parameter Tipe Wajib / Nilai default Deskripsi
sql str Wajib Pernyataan SQL, dapat berisi placeholder parameter.
? menunjukkan parameter yang perlu di-escape;
?? menunjukkan parameter yang tidak perlu di-escape
sql_params list None Parameter SQL
Contoh
1
2
3
sql = 'SELECT * FROM ?? WHERE seq > ?'
sql_params = ['demo', 1]
result = db.query(sql, sql_params=sql_params)

.non_query(...)

Menjalankan pernyataan SQL untuk menulis, memperbarui, atau menghapus, lalu mengembalikan jumlah baris yang terpengaruh. Parameternya sama dengan .query(...).

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

.query(...) dan .non_query(...) akan secara otomatis melakukan commit transaksi setelah berhasil dieksekusi; jika gagal, secara otomatis melakukan rollback dan melempar pengecualian.

Metode Pembantu

Metode Deskripsi
.query_raw(sql, sql_params=None) Menjalankan SQL kueri mentah, tanpa melalui konstruksi DFF.SQL(...)
.non_query_raw(sql, sql_params=None) Menjalankan SQL non-kueri mentah, tanpa melalui konstruksi DFF.SQL(...)
.format_sql(sql, sql_params=None, pretty=False) Menghasilkan string SQL akhir, cocok untuk debugging
.tables() Mengembalikan daftar nama tabel pada basis data saat ini
.create_sql_builder(raw_sql=None) Membuat SQL Builder

Untuk SQL dinamis reguler, utamakan penggunaan sql_params dari .query(...) atau .non_query(...). Gunakan metode SQL mentah hanya jika SQL telah disusun sepenuhnya oleh kode tepercaya.

Transaksi

Jika perlu menjalankan beberapa pernyataan SQL dalam transaksi yang sama, gunakan metode berikut:

Metode Deskripsi
.start_trans() Memulai transaksi dan mengembalikan objek koneksi transaksi
.trans_query(trans_conn, sql, sql_params=None) Menjalankan kueri dalam transaksi dan mengembalikan list[dict]
.trans_non_query(trans_conn, sql, sql_params=None) Menjalankan SQL non-kueri dalam transaksi dan mengembalikan jumlah baris yang terpengaruh
.commit(trans_conn) Melakukan commit transaksi dan menutup koneksi transaksi
.rollback(trans_conn) Melakukan rollback transaksi dan menutup koneksi transaksi
Contoh
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)

Jika terjadi pengecualian selama proses transaksi, panggil .rollback(trans_conn); setelah commit atau rollback selesai, objek koneksi transaksi yang sama tidak dapat digunakan lagi.

Pernyataan SQL Dinamis

query(...) dan non_query(...) secara internal menggunakan DFF.SQL(...) untuk mengonstruksi pernyataan SQL dan mendukung konstruksi pernyataan SQL dinamis yang kompleks.

Seperti nilai yang jumlahnya tidak pasti pada WHERE IN (...), atau INSERT INTO ... VALUES ... untuk penulisan data secara massal, dan sebagainya.

Detail lihat Pengembangan Skrip / Konstruksi SQL DFF.SQL