2012-08-01 7 views
36

La mia domanda è: perché i valori interi di una riga MySQL hanno un suffisso "L"? Ecco i dettagli:Perché i numeri interi nella tupla di righe del database hanno un suffisso "L"?

Il dizionario seguenti - artificialmente formattati qui per facilità di esposizione -

{'estimated': '', 
'suffix': '', 
'typeofread': 'g', 
    'acct_no': 901001000L, 
    'counter': 0, 
    'time_billed': datetime.datetime(2012, 5, 1, 9, 5, 33), 
    'date_read': datetime.datetime(2012, 3, 13, 23, 19, 45), 
    'reading': 3018L, 
    'meter_num': '26174200'} 

è costituito da colonne di una tabella di database MySQL zip con il risultato di lettura una volta dal tavolo.

posso rimuovere la 'L' di passare questi valori in int(), quindi se questo dizionario fosse in uno snapped_read variabile denominata, avrei potuto fare questo:

int(snapped_read['reading']) e 3018L avrebbe cambiato per 3018.

Sono solo curioso di sapere perché gli interi si presentano in questo modo.

risposta

35

Poiché nelle versioni di Python precedenti Python 3, gli interi lunghi sono stati indicati con un suffisso l o L. In Python 3, int s e long s sono stati uniti in solo int, che funziona in modo simile a long utilizzato.

si noti che, tecnicamente, Python (2) s 'int era equivalente a C di long, mentre Python long era più come una cosa BigNumber tipo con precisione illimitata (che è ora il caso per Python 3 di tipo int.)

http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex

+7

Nota a margine: MySQLdb converte TUTTI i tipi interi in caratteri lunghi su Python 2.x –

+1

È interessante sapere. Sembra che solo "BIGINT" richiederebbe, comunque, quindi suppongo che sia coerente per quanto riguarda l'interfaccia Python. http://dev.mysql.com/doc/refman/5.6/en/integer-types.html – JAB

+0

Sì, non so perché, ma anche le colonne 'TINYINT' sono state convertite in tipo lungo ... Ha bisogno di ulteriori indagini, ma penso anche che sia dovuto all'API dell'interfaccia database di Python. –

10

L è per il tipo di dati long.

Ad esempio,

age = 24 # int 
bankBalance = 20000005L # long 
+1

battere Just me! :) –

+4

Hai bisogno di un 'long' per contenere il tuo saldo bancario? Non dovresti sorseggiare una limonata da una piscina? Cosa stai facendo rispondendo alle domande su SO? (+1) - anche se potresti voler cambiare i tuoi commenti da '//' a '#'. – mgilson

+0

Scusa @mgilson Sono un ragazzo PHP :) – Kalpesh

Problemi correlati