Rumah >pembangunan bahagian belakang >Golang >Bila dan Mengapa Saya Perlu Menggunakan `db.Exec()` dan Penyata Disediakan dalam Go?

Bila dan Mengapa Saya Perlu Menggunakan `db.Exec()` dan Penyata Disediakan dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-07 22:37:15966semak imbas

When and Why Should I Use `db.Exec()` and Prepared Statements in Go?

Mengapa perlu menggunakan *DB.exec() atau pernyataan yang disediakan dalam Golang?

"Mengapa juga menggunakan db.Exec()"

Sedangkan anda boleh menggunakan db.Exec dan db.Query secara bergantian untuk pernyataan SQL yang sama, mereka menghasilkan keputusan yang berbeza. db.Exec mengembalikan bilangan baris yang terjejas (jika disokong oleh pemandu), manakala db.Query mengembalikan objek baris.

Sebagai contoh, untuk mengira bilangan baris yang dipadamkan dalam pernyataan DELETE:

res, err := db.Exec(`DELETE FROM my_table WHERE expires_at = `, time.Now())
numDeleted, err := res.RowsAffected() // Returns the number of deleted rows

Sebagai alternatif (tetapi kurang cekap):

rows, err := db.Query(`DELETE FROM my_table WHERE expires_at =  RETURNING *`, time.Now())
numDeleted := 0
for rows.Next() { numDeleted++ } // Iterate over deleted rows

db.Exec juga harus digunakan apabila anda tidak memerlukan hasil pertanyaan, hanya semakan ralat:

if _, err := db.Exec(`<my_sql_query>`); err != nil { panic(err) }

"atau penyata yang disediakan di Golang?"

Tuntutan dokumentasi bahawa Go sentiasa menggunakan pernyataan yang disediakan di bawah penutup mungkin tidak betul. Pelaksanaan pemacu nampaknya menentukan sama ada pernyataan baru yang disediakan dibuat untuk setiap panggilan db.Query.

Walau bagaimanapun, memanggil db.Sediakan dan caching db.Stmt yang terhasil boleh meningkatkan prestasi untuk pertanyaan yang kerap dilaksanakan. Rujuk dokumentasi PostgreSQL untuk butiran lanjut: https://www.postgresql.org/docs/current/static/sql-prepare.html

Atas ialah kandungan terperinci Bila dan Mengapa Saya Perlu Menggunakan `db.Exec()` dan Penyata Disediakan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn