0

在带有 myISAM 的 MySQL 表中,我有一个整数值 ex.011。当我在 Python 中查询时,它会打印我的值 11,在数字之前删除 0。它应该打印存储在 DB ex 中的确切值。011 而不是 11。有什么帮助吗?

4

2 回答 2

1

您的列是int,因此 MySQLdb 在查询结果中返回一个整数值。但是,我认为您应该能够编写一个 mySQLdb 结果集包装器(或者可能找到其他人已经编写的包装器)来检查结果集列上设置的标志并适当地转换为字符串。

看看cursor.descriptioncursor.description_flags以及 PEP-249。我认为(即我实际上没有尝试过)以下内容应该可以帮助您入门:

def get_result_set_with_db_specified_formatting(cursor):
    integer_field_types = (MySQLdb.constants.FIELD_TYPE.TINY,
                           MySQLdb.constants.FIELD_TYPE.SHORT,
                           MySQLdb.constants.FIELD_TYPE.LONG,
                           MySQLdb.constants.FIELD_TYPE.LONGLONG,
                           MySQLdb.constants.FIELD_TYPE.INT24)
    rows = cursor.fetchall()
    for row in rows:
        for index, value in enumerate(row):
            value = str(value)
            if (cursor.description[index][1] in integer_field_types
                and cursor.description_flags[index] & MySQLdb.constants.FLAG.ZEROFILL):
                if len(value) < cursor.description[index][2]:
                    value = ('0' * (cursor.description[index][2] - len(value))) + value
            row[index] = value
    return rows
于 2012-10-11T13:18:33.267 回答
0

可能是,在这种情况下简单的零填充可以吗?

>>> print str(11).zfill(3)
011

据我了解,这是数字的附加部分。如果它的长度不是常数,则需要将 DB 中的数据类型更改为 VARCHAR。

于 2012-10-11T13:25:25.233 回答