2009-08-20 5 views
0

Lors de l'utilisation de Python et de l'exécution d'une instruction Select dans MYSQL pour sélectionner 09 depuis une colonne, le zéro est supprimé et seul le 9 est imprimé.Python - MYSQL - Sélection des zéros en tête

Y a-t-il un moyen d'extraire tous les nombres, c'est-à-dire y compris le premier zéro?

+0

Quel est le type de données de la colonne? Est-ce une colonne de texte (varchar) ou une vraie colonne numérique (entier, décimal, ...)? Si c'est juste une question de comment la valeur est imprimée, vous pouvez utiliser l'opérateur *% * de Python, comme * "% 04d"% (value_of_column,) * – Dirk

+0

le type de colonne est tinyint. Il me donne le zéro principal lors de l'utilisation de PHP pour sélectionner à partir de la table –

Répondre

3

Il y a presque certainement quelque chose dans votre requête, votre définition de table, ou un ORM que vous utilisez qui pense que la colonne est numérique et convertit les résultats en entiers. Vous devrez définir la colonne comme une chaîne (partout!) Si vous voulez conserver les zéros en tête. Éditer: ZEROFILL sur le serveur ne va pas le couper. Python traite les colonnes entières comme des entiers Python, et ceux-ci n'ont pas de zéros en tête, point. Vous devrez soit changer le type de colonne à VARCHAR, utiliser quelque chose comme "%02d" % val en Python, ou mettre un CAST(my_column AS VARCHAR) dans la requête.

0

Quel type de données est la colonne? Si vous souhaitez conserver les zéros en tête, vous devez probablement utiliser un type de colonne non numérique tel que VARCHAR.

Pour les numéros de format avec des zéros à gauche en Python, utilisez un spécificateur de format:

>>> print "%02d" % (1,) 
01 
+0

Le type de colonne est tinyint. Il me donne le zéro principal en utilisant PHP pour sélectionner dans la table. –

+0

Cela ressemble à un bug PHP. Les nombres ne doivent pas avoir de zéros en tête. –

3

MySQL prend en charge ce dans la définition de la colonne:

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

INSERT INTO MyTable (i) VALUES (9); 

SELECT * FROM MyTable; 

+------+ 
| i | 
+------+ 
| 09 | 
+------+ 
+0

Oui le zéro principal est dans la table mais pas dans les instructions select et print en Python –

0

Vous pouvez exécuter chaque requête sur cette colonne par un fonction telle que:

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

Cela convertirait le nombre en une chaîne, mais aussi loin que Je sais, Python n'autorise pas les zéros en tête dans ses types de données numériques. Quelqu'un me corrige si je me trompe. Edit: La réponse de John Millikin fait la même chose mais est plus efficace. Merci de m'avoir appris sur les spécificateurs de format!

Questions connexes