Причиной возникновения этой проблемы является следующая строка кода:
sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele)s)'''
потому что, когда число с плавающей точкой здесь преобразуется в строку, вы не получите все ожидаемые цифры. Например,
str(ele)
производит
'0.333333333333'
Изменение строки на
sql = '''insert into waypoints (name, elevation) values (%(name)s, %(ele).17f)'''
Я верю, что даст вам желаемый результат, потому что
'%(ele).17f' % dic
производит
'0.33333333333333331'