2012-08-01 33 views
36

Câu hỏi của tôi là tại sao giá trị số nguyên của hàng MySQL có hậu tố 'L'? Dưới đây là chi tiết:Tại sao các số nguyên trong tuple của cơ sở dữ liệu có hậu tố 'L'?

Từ điển sau - định dạng nhân tạo vào đây để dễ dàng hiển thị -

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

bao gồm các cột cơ sở dữ liệu bảng của MySQL nén với kết quả của việc đọc một lần từ bảng.

tôi có thể loại bỏ các 'L' bằng cách thông qua các giá trị vào int(), vì vậy nếu từ điển mà là trong một biến có tên snapped_read, tôi có thể làm điều này:

int(snapped_read['reading'])3018L sẽ thay đổi để 3018.

Tôi chỉ tò mò là tại sao các số nguyên hiển thị theo cách này.

Trả lời

35

Bởi vì trong các phiên bản của Python trước Python 3, literals số nguyên dài được chỉ báo bằng một l hoặc L hậu tố. Trong Python 3, int s và long s đã được hợp nhất thành chỉ int, hoạt động khá giống với long được sử dụng.

Do lưu ý rằng, về mặt kỹ thuật, Python (2) 's int tương đương với C long, trong khi Python của long là giống như một điều BigNumber -type với độ chính xác không giới hạn (mà bây giờ là trường hợp đối với Python 3 của int loại.)

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

+7

Lưu ý phụ: MySQLdb chuyển đổi TẤT CẢ các loại số nguyên thành loại dài trên Python 2.x –

+1

Thú vị khi biết. Có vẻ như chỉ 'BIGINT' sẽ yêu cầu điều đó, vì vậy tôi đoán nó là sự nhất quán về mặt giao diện Python. http://dev.mysql.com/doc/refman/5.6/en/integer-types.html – JAB

+0

Vâng, không biết tại sao, nhưng ngay cả cột 'TINYINT' đã được chuyển đổi thành loại dài ... Cần điều tra thêm, nhưng tôi cũng nghĩ rằng đó là do API giao diện cơ sở dữ liệu của Python. –

10

L dành cho loại dữ liệu long.

Ví dụ,

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

Chỉ cần đánh bại tôi! :) –

+4

Bạn cần một 'long' để chứa số dư ngân hàng của bạn? Bạn không nên nhấm nháp nước chanh bên hồ bơi ở đâu đó? Bạn đang làm gì để trả lời các câu hỏi về SO? (+1) - mặc dù bạn có thể muốn thay đổi nhận xét của mình từ '//' thành '#'. – mgilson

+0

Xin lỗi @mgilson Tôi là một anh chàng PHP :) – Kalpesh

Các vấn đề liên quan