Python 和 MySQL - 数字类型有限?

标签 python mysql sqlalchemy

我正在尝试使用MySQL来保存一些时间序列 bool 数据,然后根据保存的数据做出决定。

我需要保存最后 144 个样本,然后检查是否有超过 X% 的非零值。

我尝试使用比例为 44 的数字字段。有时数据会被截断为 9999999999。

这就是我创建专栏的方式:

op.add_column('object', sa.Column('data_history',        sa.Numeric(scale=44), nullable=False, default=0))

这是我处理计算的代码:

happens_now = data < DATA_THRESHOLD
mask = 0
for i in xrange(144):
    mask <<= 1
    mask |= 1
safe_logging.info('History: {} LongHistory: {}'.format(my_object.data_history, long(my_object.data_history)))
my_object.data_history *= 2
safe_logging.info('History: {} LongHistory: {}'.format(my_object.data_history, long(my_object.data_history)))
my_object.data_history += happens_now
safe_logging.info('History: {} LongHistory: {}'.format(my_object.data_history, long(my_object.data_history)))
history_to_consider = long(my_object.data_history) & mask
safe_logging.info('Mask: {} Data: {} Happens now: {} History: {}'.format(mask, data, happens_now, history_to_consider))
pop_count = self._PopCount(history_to_consider)
if (not my_object.is_total) and pop_count/144 > PERCENTAGE_THERSHOLD:
    my_object.is_total = True

这是我两次连续数据插入的日志输出:

INFO:  History: 8589934591 LongHistory: 8589934591
INFO:  History: 17179869182 LongHistory: 17179869182
INFO:  History: 17179869183 LongHistory: 17179869183
INFO:  Mask: 22300745198530623141535718272648361505980415 Data: 10 Happens now: True History: 17179869183

INFO:  History: 9999999999 LongHistory: 9999999999
INFO:  History: 19999999998 LongHistory: 19999999998
INFO:  History: 19999999999 LongHistory: 19999999999
INFO:  Mask: 22300745198530623141535718272648361505980415 Data: 10 Happens now: True History: 19999999999

我试图在 MySQL 文档中找到限制,但找不到。 Python 似乎可以很好地处理长数字(请参阅掩码)。

这是 SQLAlchemy 的限制吗?我错过了一些 MySQL 限制?

最佳答案

因此,正如 @Shadow 指出的那样,我混淆了比例和精度。

小数位数是小数点后的位数,精度是总位数。

此外,最大精度为 30,因此我必须连接两个左右的 BigInt,以获得更大的数字。

关于Python 和 MySQL - 数字类型有限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34389748/

相关文章:

mysql - 在触发器内声明变量

java - 异步任务中的json空指针错误

python - SQLAlchemy:在连接查询中使用删除/更新

python - 使用 connection.execute() 的 sqlalchemy 原始 sql 查询限制

python - 使用棉花糖序列化 sqlalchemy hybrid_property

python - 异征 : Problems with indentation

python - __str__ 返回 UnicodeEncodeError,但在其他方面有效 (u'\xa0')

python - Pandas groupby agg std NaN

python - 如何验证 tf.unsorted_segments_max 的 segment_ids 参数?

mysql - 如何使用 group by、where 和 order by 子句在大表(>38.700.000 行)上定义索引