Rumah  >  Artikel  >  pangkalan data  >  Mengapa Saya Mendapat "Ralat Sintaks SQL" Apabila Menggunakan Pernyataan Disediakan dalam Python dengan MySQL?

Mengapa Saya Mendapat "Ralat Sintaks SQL" Apabila Menggunakan Pernyataan Disediakan dalam Python dengan MySQL?

DDD
DDDasal
2024-11-07 16:51:03798semak imbas

Why Am I Getting a

Menggunakan Penyata Disediakan dengan MySQL dalam Python: Menjelaskan Sintaks dan Mengelak Ralat

Anda menghadapi ralat semasa menggunakan pernyataan yang disediakan dengan MySQL dalam Python, dengan mesej "'Anda mempunyai ralat dalam sintaks SQL anda'". Mari kita periksa kod yang anda berikan dan kenal pasti isu tersebut.

Kod yang anda gunakan untuk menyediakan penyata kelihatan betul, tetapi pelaksanaan penyata seterusnya mengandungi ralat. Khususnya, kod dalam gelung nampaknya menggunakan parameter dengan sintaks yang berbeza daripada jangkaan pernyataan yang disediakan.

sql = "EXECUTE stmt USING \'{}\', \'{}\', {}, {};".format(d, t, tag, power)

Dalam contoh yang diberikan oleh jawapan, pendekatan yang lebih cekap menggunakan modul MySQLdb Python dicadangkan:

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

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

Di sini, ruang letak untuk nilai (%s) ditentukan terus dalam rentetan pertanyaan SQL dan nilai sebenar ialah diluluskan sebagai tupel dalam panggilan laksana. Ini menghapuskan keperluan untuk pemformatan rentetan dalam peringkat pelaksanaan, yang mungkin menyebabkan ralat sintaks dalam kod anda.

Sebagai alternatif, anda boleh menggunakan Penyambung/Python MySQL sendiri dengan pilihan prepare=True dalam kursor() kilang, yang lebih cekap dan jelas daripada menggunakan penyata SEDIA dan LAKSANAKAN.

Atas ialah kandungan terperinci Mengapa Saya Mendapat "Ralat Sintaks SQL" Apabila Menggunakan Pernyataan Disediakan dalam Python dengan MySQL?. 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