Why do integers in database row tuple have an 'L' suffix?
My question is why do a MySQL row's integer values have an 'L' suffix? Here are the details:
The following dictionary -- artificially formatted here for ease of display --
{'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'}
is comprised of a MySQL database table's columns zipped with the result of reading once from the table.
I can remove the 'L' by passing these values into int(), so if that dictionary were in a variable named snapped_read, I could do this:
int(snapped_read['reading'])
and 3018L
would change to 3018
.
I'm just curious as to why integers show up this way.
Solution 1:
Because in versions of Python before Python 3, long integer literals were indicated with an l
or L
suffix. In Python 3, int
s and long
s have been merged into just int
, which functions pretty much like long
used to.
Do note that, technically, Python( 2)'s int
was equivalent to C's long
, while Python's long
was more like a BigNumber
-type thing with unlimited precision (which is now the case for Python 3's int
type.)
http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex
Solution 2:
L
is for the long
data type.
For example,
age = 24 # int
bankBalance = 20000005L # long