Dai un'occhiata alla documentazione:
Il segnaposto delle variabili deve essere sempre un %s
, anche se un segnaposto diverso (come un %d
per numeri interi o %f
per float) potrebbe sembrare più appropriato:
>>> cur.execute("INSERT INTO numbers VALUES (%d)", (42,)) # WRONG
>>> cur.execute("INSERT INTO numbers VALUES (%s)", (42,)) # correct
Mentre, la tua query SQL contiene tutti i tipi di segnaposto:
"""INSERT INTO weather_data(temperature,humidity,wind,barometer,updated_on,place_id)
VALUES (%(temperature)f, %(humidity)f, %(wind)f, %(barometer)f, %(date)s, %(place_id)d)"""