Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan pernyataan yang disiapkan dengan mysql di python

Menggunakan pernyataan yang disiapkan dengan MySQL dengan Python dijelaskan misalnya di http://zetcode.com/db/mysqlpython/ -- lihat di dalam halaman itu untuk Prepared statements .

Dalam kasus Anda, itu adalah, misalnya:

sql = ('INSERT INTO {} (date, time, tag, power) VALUES '
       '(%s, %s, %s, %s)'.format(self.db_scan_table))

dan kemudian, "dalam lingkaran" seperti yang Anda katakan:

self.cursor.execute(sql, (d, t, tag, power))

tanpa pemformatan string lebih lanjut -- MySQLdb module melakukan persiapan dan eksekusi bagian atas nama Anda (dan mungkin menyimpan hal-hal untuk menghindari pengulangan pekerjaan yang tidak perlu, dll, dll).

Pertimbangkan, tergantung pada sifat "loop" yang Anda sebutkan, bahwa mungkin saja satu panggilan ke .execute_many (dengan urutan tupel sebagai argumen kedua) dapat menggantikan seluruh loop (kecuali jika Anda memerlukan lebih banyak pemrosesan dalam loop tersebut selain penyisipan data ke dalam DB).

Ditambahkan:alternatif yang lebih baik saat ini mungkin menggunakan Connector/Python mysql sendiri dan prepare=True yang eksplisit opsi di .cursor() pabrik -- lihat http://dev .mysql.com/doc/connector-python/en/connector-python-api-mysqlcursorprepared.html . Ini memungkinkan Anda memiliki kursor khusus di mana pernyataan disiapkan (dengan protokol biner "lebih efisien daripada menggunakan SIAPKAN dan JALANKAN", menurut halaman mysql.com itu) dan satu lagi untuk pernyataan yang lebih baik tidak disiapkan; "eksplisit lebih baik daripada implisit" adalah setelah semua salah satu prinsip dalam "The Zen of Python" (import this dari prompt interaktif untuk membaca semua prinsip itu). mysqldb melakukan sesuatu secara implisit (dan tampaknya versi open-source saat ini tidak gunakan pernyataan yang disiapkan) tidak dapat menjadi arsitektur yang sebaik Connector/Python yang lebih eksplisit.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa mengatur format peningkatan otomatis ke 0001 di MySQL?

  2. Bagaimana cara menghasilkan halaman HTML secara dinamis menggunakan PHP?

  3. MySQL GABUNG dengan LIMIT 1 di tabel yang digabungkan

  4. Bagaimana cara mengubah semua tabel di database saya ke set karakter UTF8?

  5. MySQL #1093 - Anda tidak dapat menentukan 'hadiah' tabel target untuk pembaruan dalam klausa FROM