2017-03-16 51 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