0

myISAM を含む MySQL テーブルには、整数値 ex.011 があります。Python でクエリを実行すると、数値の前に 0 を削除して値 11 が出力されます。DB ex に格納されている正確な値を出力する必要があります。11 の代わりに 011。

4

2 に答える 2

1

あなたの列は であるintため、MySQLdb はクエリ結果に整数値を返します。ただし、結果セットの列に設定されたフラグを検査し、適切に文字列にキャストする mySQLdb 結果セット ラッパーを作成する (または他の誰かが既に作成したものを見つける) ことができるはずだと思います。

cursor.descriptionPEP-249とcursor.description_flags同様に見てください。私は(つまり、実際に試したことはありませんが)、次の行に沿って何かを始める必要があると思います:

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 に答える