【问题标题】:Why do integers in database row tuple have an 'L' suffix?为什么数据库行元组中的整数具有“L”后缀?
【发布时间】:2012-07-30 16:07:24
【问题描述】:

我的问题是为什么 MySQL 行的整数值有一个“L”后缀?以下是详细信息:

下面的字典——为了方便显示,这里人为地格式化了——

{'estimated': '', 
 'suffix': '', 
 'typeofread': 'g', 
  'acct_no': 901001000L, 
  'counter': 0, 
  'time_billed': datetime.datetime(2012, 5, 1, 9, 5, 33), 
  'date_read': datetime.datetime(2012, 3, 13, 23, 19, 45), 
  'reading': 3018L, 
  'meter_num': '26174200'}

由 MySQL 数据库表的列组成,压缩后从表中读取一次结果。

我可以通过将这些值传递给 int() 来删除“L”,因此如果该字典位于名为 snapped_read 的变量中,我可以这样做:

int(snapped_read['reading'])3018L 将更改为 3018

我只是好奇为什么整数会这样显示。

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    因为在 Python 3 之前的 Python 版本中,长整数文字用 lL 后缀表示。在 Python 3 中,ints 和 longs 已合并为 int,其功能与以前的 long 非常相似。

    请注意,从技术上讲,Python(2) 的 int 等效于 C 的 long,而 Python 的 long 更像是具有无限精度的 BigNumber 类型的东西(现在就是这种情况对于 Python 3 的 int 类型。)

    http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex

    【讨论】:

    • 旁注:MySQLdb 在 Python 2.x 上将所有整数类型转换为长类型
    • 有兴趣知道。不过,看起来只有 BIGINT 会要求这样做,所以我猜这是为了 Python 接口的一致性。 dev.mysql.com/doc/refman/5.6/en/integer-types.html
    • 是的,不知道为什么,但即使TINYINT 列也被转换为长类型......需要进一步调查,但我也认为这是由于 Python 的数据库接口 API。
    【解决方案2】:

    L 用于long 数据类型。

    例如,

    age = 24 # int
    bankBalance = 20000005L # long
    

    【讨论】:

    • 您需要long 来包含您的银行余额?你不应该在某个地方的游泳池边喝柠檬水吗?你在回答关于 SO 的问题吗? (+1) -- 尽管您可能希望将您的 cmets 从 // 更改为 #
    • 对不起@mgilson我是一个PHP人:)
    • 在 Python 中,您只需编写 age = 24bankBalance = 20000005L,没有类型定义,也没有分号来结束语句。 :)
    • 我希望我需要很长时间来保持我的银行余额! :D
    【解决方案3】:

    因为它们不完全是整数,所以它们是“长整数”。

    http://docs.python.org/library/stdtypes.html#typesnumeric

    不过,它们通常不会带来太多麻烦

    >>> a=1
    >>> b=long(1)
    >>> a
    1
    >>> b
    1L
    >>> a==b
    True
    

    关于此的其他 stackoverflow 问题:here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-12
      • 2018-03-05
      • 1970-01-01
      • 2022-07-15
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      相关资源
      最近更新 更多