2009-08-20 50 views
0

當使用Python並對MYSQL執行Select語句以從列中選擇09時,零被刪除,只有9被打印。Python - MYSQL - 選擇前導零

有什麼辦法可以拉出所有數字,即包括前導零?

+0

什麼是列的數據類型給定鑄造varchar有這個問題?它是一個文本列(varchar)還是一個真正的數字列(整數,小數...)?如果只是打印值的問題,則可以使用Python的*%*運算符,如*「%04d」%(value_of_column,)* – Dirk 2009-08-20 18:40:44

+0

他的列類型爲tinyint。當使用PHP從表中選擇時,它給了我前導零。 – 2009-08-20 18:43:15

回答

3

在你的查詢,你的表定義或者你正在使用的ORM中,幾乎肯定有東西認爲該列是數字,並將結果轉換爲整數。如果要保留前導零,則必須將該列定義爲字符串(無處不在!)。

編輯:ZEROFILL在服務器上不會削減它。 Python將整數列視爲Python整數,而那些列沒有前導零,句點。您必須將列類型更改爲VARCHAR,在Python中使用類似"%02d" % val的東西,或將CAST(my_column AS VARCHAR)置於查詢中。

0

列的數據類型是什麼?如果要保留前導零,則應該使用非數字列類型,如VARCHAR

格式化數字可以用Python前導零,使用格式說明:

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

列類型是tinyint。 當使用PHP從表中選擇時,它給了我前導零。 – 2009-08-20 18:42:38

+0

這聽起來像一個PHP錯誤。數字不應該有前導零。 – 2009-08-20 18:46:15

3

MySQL支持此列定義:

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

INSERT INTO MyTable (i) VALUES (9); 

SELECT * FROM MyTable; 

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

是的,前導零在表中,但不在Python中的select和print語句中 – 2009-08-20 18:48:19

0

你可以通過運行在該列中的每個查詢函數如:

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

這會將數字轉換爲字符串,但儘可能我知道,Python不允許其數字數據類型中的前導零。有人糾正我,如果我錯了。

編輯:John Millikin的答案與此相同,但效率更高。感謝您教我關於格式說明符!