See Keith's response. But also, are you sure you copied and pasted everything correctly? I swear this should complain about only having 1 supplied. .executemany(sql, (values,)) should basically run .execute(sql, values) once, since (values,) is a 1 element tuple. And "values = (btc_price_rows,)" means values itself is also a 1 element tuple. So shouldn't it complain about only having 1 binding supplied? I would bet 19931624 is the size of r.text, and you did either .executemany(sql, (btc_price_rows,)) or you did values = btc_price_rows or something similar.