在Python中将十进制值传递给MySQL

时间:2016-04-13 04:38:42

标签: python mysql

所以目前我的表格如下:

sub

现在,我能够连接到数据库,但是在向数据库插入新行时收到警告:

parts

在我计算开始和结束时间并减去它的持续时间内。我通过四舍五入(认为这是十进制问题)并将其作为字符串传递来玩它,但它看起来像这样:

    name      ->      type 
--------------------------------
   gameid     ->   mediumint(7)
  timestamp   ->    timestamp
  duration    ->   decimal (5,5)
   winner     ->    varchar(20)
winner_score  ->     int(1)
    loser     ->    varvhar(20)
 loser_score  ->     int(1)

试着玩我为它写的东西,看起来像:

Warning: Out of range value for column 'duration' at row 1

出于某种原因,我不断收到错误。不确定gametime = round((time.time() - start_time),5) 是否会影响它。在MySQL后端,一切都很好,除了持续时间(无论长度)总是0.99999。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

decimal(5,5)表示它只能存储小数。任何带整数的数字都将被截断为0.99999。

演示:

mysql> select cast(2 as decimal(5,5));
+-------------------------+
| cast(2 as decimal(5,5)) |
+-------------------------+
|                 0.99999 |
+-------------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+------------------------------------------------------------------+
| Level   | Code | Message                                                          |
+---------+------+------------------------------------------------------------------+
| Warning | 1264 | Out of range value for column 'cast(2 as decimal(5,5))' at row 1 |
+---------+------+------------------------------------------------------------------+
1 row in set (0.00 sec)

要使其正常工作,您可以将列类型更改为其他精度,例如decimal(10,5)