2012-09-30 40 views
9

Tôi đang thực hiện truy vấn mysql trong python bằng gói MySQLdb. Mã này trông giống như sau:nhận giá trị thập phân thô từ truy vấn mysqldb

c=db.cursor() 
c.execute("""select * from table""") 
output = [] 
for row in c: 
    output.append(row[4]) 

nơi row[4] chứa một giá trị thập phân mà tôi muốn lưu trữ trong danh sách output.

Vấn đề là mọi giá trị mà tôi nhận được trông giống như sau: Decimal('XX.XX') trong đó tất cả những gì tôi muốn trong danh sách output là XX.XX. Vào cuối của kịch bản, danh sách output của tôi trông như thế này:

[Decimal('10.02'), Decimal('20.24'), ...] 

Nhưng tôi cần nó để chỉ chứa các con số, như thế này:

[10.02, 20.24, ...] 

Làm thế nào để làm điều đó?

Cảm ơn!

Trả lời

8
c=db.cursor() 
c.execute("""select * from table""") 
output = [] 
for row in c: 
    output.append(float(row[4])) 
+0

đó là cảm ơn! –

5

Sử dụng float():

output.append(float(row[4])) 

Nhưng float() có thể dẫn đến một cái gì đó như:

In [184]: float(Decimal('10.02')) 
Out[184]: 10.02 

In [185]: float(Decimal('20.24')) 
Out[185]: 20.239999999999998 
+0

có điều này là ok, cảm ơn! –

2

Nếu bạn đang cố gắng để viết một mã chung mà hoạt động trên đầu ra cột, trên giải pháp sẽ không tập luyện. Trong trường hợp đó, chúng ta có thể viết truy vấn SELECT theo cách mà cột được trả về dưới dạng Chuỗi và chúng ta chỉ nhận được giá trị của những gì chúng ta muốn. Truy vấn có thể được đóng khung theo cách dưới đây,

SELECT 
CAST(COL1 AS CHAR) AS COL1, 
CAST(COL2 AS CHAR) AS COL2, 
. 
. 
. 
FROM TABLE; 
1
c=db.cursor() 
c.execute("""select * from table""") 
output = [] 
for row in c: 
    row_data = [] 
    for data in row: 
     if type(data) is Decimal: 
      row_data.append(float(data)) 
     else: 
      row_data.append(str(dat)) 
    output.append(row_data) 

;)

+0

Điểm nhỏ, nhưng bạn cần thụt lề dòng cuối cùng để bao gồm nó với phần còn lại của định dạng đoạn mã. – toonice

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