Python - MYSQL - выбор ведущих нулей - PullRequest
1 голос
/ 20 августа 2009

При использовании Python и выполнении оператора Select для MYSQL для выбора 09 из столбца ноль сбрасывается, и печатается только 9.

Есть ли способ вытащить все числа, т. Е. Начальный ноль?

Ответы [ 5 ]

4 голосов
/ 20 августа 2009

В вашем запросе, определении таблицы или используемом ORM почти наверняка есть что-то, что считает столбец числовым и преобразует результаты в целые. Вам нужно определить столбец как строку (везде!), Если вы хотите сохранить начальные нули.

Редактировать: ZEROFILL на сервере не собирается его обрезать. Python рассматривает целочисленные столбцы как целые числа Python, и у них нет начальных нулей, точка. Вам придется либо изменить тип столбца на VARCHAR, использовать что-то вроде "%02d" % val в Python, либо поставить CAST(my_column AS VARCHAR) в запросе.

3 голосов
/ 20 августа 2009

MySQL поддерживает это в определении столбца:

CREATE TABLE MyTable (
  i TINYINT(2) ZEROFILL
);

INSERT INTO MyTable (i) VALUES (9);

SELECT * FROM MyTable;

+------+
| i    |
+------+
|   09 | 
+------+
1 голос
/ 18 октября 2012

Лучший вариант будет использовать CAST, как предложено Eevee, но вы должны использовать CAST ( ur_field AS CHAR(2) ), так как приведение к varchar имеет эту проблему, как указано в этом посте

Как конвертировать из varbinary в char / varchar в mysql

0 голосов
/ 21 августа 2009

Вы можете выполнить каждый запрос в этом столбце с помощью функции, такой как:

if len(str(number)) == 1: number = "0" + str(number)

Это приведёт число к строке, но, насколько я знаю, Python не допускает начальные нули в типах чисел. Кто-нибудь поправит меня, если я ошибаюсь.

Редактировать: ответ Джона Милликина делает то же самое, что и этот, но более эффективен. Спасибо за то, что научили меня спецификаторам формата!

0 голосов
/ 20 августа 2009

Какой тип данных является столбцом? Если вы хотите сохранить начальные нули, вам следует использовать нечисловой тип столбца, например VARCHAR.

Чтобы отформатировать числа с ведущими нулями в Python, используйте спецификатор формата:

>>> print "%02d" % (1,)
01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...