2012-08-01 8 views
36

Mi pregunta es ¿por qué los valores enteros de una fila MySQL tienen un sufijo 'L'? Aquí están los detalles:¿Por qué los enteros en la tupla de fila de la base de datos tienen un sufijo 'L'?

El siguiente diccionario - artificialmente este formato para facilitar la visualización -

{'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'} 

se compone de columnas de una tabla de base de datos MySQL con cremallera con el resultado de la lectura de una vez de la mesa.

me puede quitar la 'L' que pasa por estos valores en int(), así que si eso fuera diccionario en una variable denominada snapped_read, que podría hacer esto:

int(snapped_read['reading']) y 3018L cambiaría a 3018.

Tengo curiosidad por saber por qué los enteros aparecen de esta manera.

Respuesta

35

Debido a que en las versiones de Python antes Python 3, literales enteros largos se indican con un sufijo l o L. En Python 3, int sy long s se han fusionado en solo int, lo que funciona más o menos como long solía hacerlo.

tenga en cuenta que, técnicamente, Python (2) 's int era equivalente a C de long, mientras que Python de long era más como una cosa BigNumber de tipo con precisión ilimitada (que ahora es el caso para Python 3 int tipo.)

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

+7

Nota al margen: MySQLdb convierte TODOS los tipos enteros a tipo largo en Python 2.x –

+1

Interesante de conocer. Parece que solo 'BIGINT 'requeriría eso, así que supongo que es por consistencia en términos de la interfaz de Python. http://dev.mysql.com/doc/refman/5.6/en/integer-types.html – JAB

+0

Sí, no sé por qué, pero incluso las columnas 'TINYINT' se convirtieron en tipo largo ... Necesita más investigación, pero también creo que se debe a la API de interfaz de base de datos de Python. –

10

L es para el tipo de datos long.

Por ejemplo,

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

Sólo me golpearon! :) –

+4

¿Necesita un "largo" para contener su saldo bancario? ¿No deberías estar bebiendo limonada junto a una piscina? ¿Qué estás haciendo respondiendo preguntas sobre SO? (+1) - aunque es posible que desee cambiar sus comentarios de '//' a '#'. – mgilson

+0

Lo siento @mgilson Soy un tipo PHP :) – Kalpesh

Cuestiones relacionadas