Kode Anda untuk membuat kueri tidak mencoba mengutip nilai string:
cmd = "INSERT INTO resulttest (category, value, timestamp) VALUES (" + key + ", " + str(value) + ", " + str(timestamp) + ")"
Lihat pernyataan SQL yang Anda cetak:
INSERT INTO resulttest (category, value, timestamp) VALUES (composed, 2, 1343186948.8)
Bukankah "kategori" harus dikutip?
Anda seharusnya tidak membuat pernyataan SQL dengan operasi string sejak awal. Ini adalah bagaimana kerentanan injeksi SQL terjadi. Sebagai gantinya, Anda harus menggunakan placeholder dan membiarkan perpustakaan MySQL menanganinya:
c.execute(
"INSERT INTO resulttest (category, value, timestamp) VALUES (?, ?, ?)",
(key, value, timestamp)
)