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

Kesalahan Python dan mySQLdb:OperationalError:(1054, kolom tidak diketahui di 'di mana klausa')

Jangan gunakan "injeksi string" ke dalam SQL Anda kecuali untuk kasus yang benar-benar diperlukan, seperti str(DEPT) di sini untuk memilih tabel yang Anda pilih. Untuk setiap kasus lainnya, gunakan fitur passing parameter dari Python DB API -- ini akan mengutip hal-hal dengan benar untuk Anda dan secara otomatis melindungi Anda dari serangan "injeksi SQL", antara lain. (Terkadang bisa juga lebih cepat).

Karena MySQLdb menggunakan notasi yang tidak menguntungkan %s untuk parameter, inilah yang harus Anda lakukan (juga memperbaiki gaya agar sesuai dengan PEP8, tidak diperlukan tetapi tidak ada salahnya;-):

conn = MySQLdb.connect(host="localhost", user="user", passwd="pass", db="dbase")
cursor = conn.cursor()
q = 'SELECT * FROM %s WHERE course=%%s AND sec = %%s""" % (DEPT,)
cursor.execute(q, (CLASS, SEC))

%% s dalam format string yang menghasilkan q menjadi satu % masing-masing setelah memformat, jadi q tersisa dengan dua kemunculan %s -- yang execute mengisi dengan rapi dengan versi CLASS yang diformat dengan benar dan SEC . Semua str panggilan berlebihan, dll.

Sebagai tambahan, jika Anda menggunakan Python 2.6 atau lebih baru, untuk pemformatan string Anda harus menggunakan format baru bukan metode lama % operator -- yang menyelamatkan Anda dari kebutuhan akan "tanda-tanda % yang digandakan", di antara keuntungan lainnya. Saya belum menerapkan perubahan itu dalam cuplikan di atas untuk berjaga-jaga jika Anda terjebak dengan 2.5 atau lebih lama (jadi kode di atas berfungsi di versi Python apa pun, bukan hanya di versi yang cukup baru).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL menulis pada file teks

  2. membangun fitur zona waktu di aplikasi web PHP

  3. com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:Entri duplikat '' untuk kunci 'PRIMARY'

  4. Baris duplikat MySQL

  5. Gunakan Database Relasional MySQL di Ubuntu 10.04 LTS (Lucid)