2010-07-28 9 views
1

J'ai rencontré un problème intéressant. J'ai une base de données MySQL qui contient des doubles avec des valeurs décimales très précises (par exemple, 0.00895406607247756, 17 décimales). Ce sont des données scientifiques, donc ce haut niveau de précision est très important.Python MySQLdb curseur troncature des valeurs

J'utilise MySQLdb en Python pour sélectionner les données de la base de données:

cursor.execute("SELECT * FROM " ...etc...) 

for n in range(cursor.rowcount): 
    row = cursor.fetchone() 
    print row 

Pour une raison quelconque, quand il arrive à mes décimales très précises, ils ont été tronqués à un maximum de 14 décimales . (c'est-à-dire que la décimale précédente devient 0.00895406607248)

Est-il possible d'obtenir les données de MySQLdb dans leur forme d'origine sans les tronquer?

+0

vous pourriez faire 'pour row dans le curseur: print (row)', vous le savez? – SilentGhost

+0

Merci. Je le sais; Je ne fais pas que imprimer les lignes, je fais d'autres choses avec les valeurs. C'était juste un exemple de la façon dont je reçois les données. –

Répondre

3

Quel type de données MySQL utilisez-vous pour stocker les données? Est-ce DECIMAL(18,17)? DECIMAL s ont jusqu'à 65 digits of precision.

Si vous définissez le type de données MySQL pour utiliser DECIMAL(...), alors MySQLdb convertira les données en objet Python decimal.Decimal, ce qui devrait préserver la précision.

+0

J'utilise DOUBLE. Je vais donner un coup de DECIMAL. –

+0

Merci! Cela semblait faire l'affaire. –