【问题标题】:Printing results from cursor.fetchall() without the trailing 'L'从 cursor.fetchall() 打印结果,不带尾随 'L'
【发布时间】:2018-03-06 21:39:00
【问题描述】:

我有一个 python 代码通过 MySQLdb 访问 mysql 来运行一个 select 语句。然后我使用cursor.fetchall() 将该输出收集为一个数组,但问题是它会在每个输出的末尾打印一个L,如下所示:

sql = "SELECT data1, data2  FROM table1, table2 ;"
cursor.execute(sql)
dataarray = cursor.fetchall()
print dataarray

>>> ((75379L, 45708L), ...)

但在我的表中,没有 L,只有数字。我怎样才能确保它只是在没有 L 的情况下获取和打印数据?我宁愿避免在字符串上使用[:-1],因为它会将我的None 值更改为Non

【问题讨论】:

    标签: python mysql arrays mysql-python fetchall


    【解决方案1】:

    L 表示long 整数类型。在 Python 2 中,它自动用于太大而无法表示为纯整数的值。

    MySQLdb 似乎总是返回 longs:

    虽然 MySQL 的 INTEGER 列完美地转换为 Python 整数,UNSIGNED INTEGER 可能会溢出,所以这些值是 而是转换为 Python 长整数。

    在这些值上调用 str() 应该省略结尾的 'L'

    【讨论】:

    • 那么如果我用这些值更新我的表,它会正确更新吗?如在 75379L 中会输入整型数据类型的列而不报错?
    • 是的,intlong 可以互换。顺便说一句,如果您打印一个单独的值,您将看不到尾随的“L”。你看到它是因为你正在打印一个容器。
    • 我发现文档令人困惑。你真的可以溢出一个 python int 但不是一个有一些值的 long 吗?我以为多年前这种区别就消失了?
    • @roganjosh:不,如果值太大而无法表示为纯整数,Python 会自动创建一个长整数。 MySQLdb 似乎只是明确地这样做了。
    猜你喜欢
    • 2020-07-24
    • 1970-01-01
    • 2022-01-25
    • 2015-02-04
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多