2017-03-16 46 views
0

我有數據類型轉換的問題。 使用django和pypyodbc lib我試圖從oracle數據庫(外部)接收數據並將其保存到本地應用程序數據庫。通過sql查詢的數據類型轉換

import pypyodbc 
def get_data(request): 
    conn = pypyodbc.connect("DSN=...") 
    cursor = conn.cursor() 
    cursor.execute("SELECT value FROM table") 
    data = cursor.fetchall() 

    for row in data: 
     d = External_Data(first_val = row[0]) 
     d.save() 

從值輸出爲 「0,2」,我已經收到錯誤消息:

could not convert string to float: b',02' 

當我改變的SQL語句:

SELECT cast(value as numeric(10,2) from table) 

我收到錯誤信息:

[<class 'decimal.ConversionSyntax'>] 

如何更改th在數據獲取浮動數據並保存。我使用DecimalField(max_digits = 10,decimal_places = 2)作爲模型字段。

回答

0

我認爲這個問題帶有隱式類型變化。

當您從get_data函數中獲取數據時,row[0] var在for循環中看起來好像是Bytes變量。

所以首先,我建議檢查row[0]的數據類型與print(type(row[0]))

如果結果是Bytes,你可以這樣做:

import pypyodbc 
def get_data(request): 
    conn = pypyodbc.connect("DSN=...") 
    cursor = conn.cursor() 
    cursor.execute("SELECT value FROM table") 
    data = cursor.fetchall() 

    for row in data: 
     data = float(str(row[0]).replace(',','.')) 
     d = External_Data(first_val=data) 
     d.save() 
+0

的問題是關於逗號分隔符。我得到了「0.2」的「0.2」,python將它作爲字符串進行了解釋。我決定使用replace(value,',','。')來更改sql語句。現在它適用於我。謝謝 – Gloom