Я относительно новичок в Python (3.x), и одно из смешивающих поведений языка состоит в том, что десятичные числа и числа с плавающей запятой кажутся разными типами (я предполагаю, что здесь разница обычна между double / float. ..).
Сложность изображения заключается в том, что мои Python logi c считывают / записывают в MySQL записи с полями, определенными как десятичные (с различными форматами).
Со стороны записи я определил pymysql
кодировщики, как это:
import numpy as np
import pymysql
pymysql.converters.encoders[np.float64] = pymysql.converters.escape_float
pymysql.converters.conversions = pymysql.converters.encoders.copy()
pymysql.converters.conversions.update(pymysql.converters.decoders)
Это помогло, я думаю, с сохранением Python десятичных знаков к MySQL записям.
Но на стороне чтения, кажется, нет очевидного способа получить Python float
s, когда мы читаем Decimal
поля с помощью py mysql запросов. (Возможно, это означало бы уныние и, следовательно, возможную потерю данных.)
Что люди здесь делают? Соглашение только, чтобы использовать десятичные типы всюду, чтобы обойти эти проблемы понижающего / повышающего преобразования? А как насчет интерфейса MySQL через py mysql?
В общем, я думаю, что поведение float / double должно быть просто автоматизированным c. То, что язык налагает различие между float / double, вероятно, хорошо; этот код полностью ломается, потому что простой операнд +
или -
не изящно работает с переменными типами, но это действительно сбивает с толку.
Спасибо.