Lewati ke isi

Pengembangan Skrip / Objek Konektor DFF.CONN / MySQL

Objek operasi Konektor MySQL terutama menyediakan beberapa metode untuk mengoperasikan MySQL. Konektor ini kompatibel dengan database berikut:

  • MariaDB
  • Percona Server for MySQL
  • Alibaba Cloud PolarDB for MySQL
  • Alibaba Cloud OceanBase
  • Alibaba Cloud AnalyticDB (ADB) versi MySQL

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

Parameter Tipe Wajib / Nilai Default Keterangan
connector_id str Wajib ID Konektor
database str None Menentukan database

.query(...)

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

Parameter Tipe Wajib / Nilai Default Keterangan
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 seperti INSERT, DELETE, UPDATE, dan mengembalikan jumlah baris yang terpengaruh. Parameter sebagai berikut:

Parameter Tipe Wajib / Nilai Default Keterangan
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 = '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, akan otomatis rollback dan melempar exception.

Metode Pembantu

Metode Keterangan
.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 dari database saat ini
.create_sql_builder(raw_sql=None) Membuat SQL Builder

Untuk SQL dinamis biasa, sebaiknya gunakan sql_params dari .query(...) atau .non_query(...). Hanya gunakan metode SQL mentah jika SQL telah sepenuhnya dibangun oleh kode tepercaya.

Transaksi

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

Metode Keterangan
.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 exception selama eksekusi transaksi, harus memanggil .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 menyusun pernyataan SQL dan mendukung penyusunan pernyataan SQL dinamis yang kompleks.

Seperti nilai dengan jumlah yang tidak tentu pada WHERE IN (...), atau penulisan data secara massal melalui INSERT INTO ... VALUES ..., dan sebagainya.

Detail silakan lihat Pengembangan Skrip / Konstruksi SQL DFF.SQL