在带有 myISAM 的 MySQL 表中,我有一个整数值 ex.011。当我在 Python 中查询时,它会打印我的值 11,在数字之前删除 0。它应该打印存储在 DB ex 中的确切值。011 而不是 11。有什么帮助吗?
问问题
157 次
2 回答
1
您的列是int
,因此 MySQLdb 在查询结果中返回一个整数值。但是,我认为您应该能够编写一个 mySQLdb 结果集包装器(或者可能找到其他人已经编写的包装器)来检查结果集列上设置的标志并适当地转换为字符串。
看看cursor.description
和cursor.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 回答