MySQL db返回Decimal(' number')值,如何在python中转换数据类型?

时间:2016-08-19 20:58:48

标签: python mysql

标题说真的。调用MySQL数据库并获取一个数据类型,当我尝试jsonify时,它的播放效果不佳。它让我疯狂地试图将这个数据类型转换为可用于前端的东西。

我试过调用float,int等等。十进制类型仍然存在或者我得到编码错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xf4 in position 1: invalid continuation byte

编辑:

sample query result:
(('Albania', '38521', '2011'), ('Algeria', '136964', '2011'), ('Antigua and Barbuda', '206', '2011'), ('Argentina', '86351', '2011'), ('Armenia', '3251', '2011'), ('Aruba', '11511', '2011'), ('Australia', '421690', '2011'), ('Azerbaijan', '31622', '2011'),

top line of query: 
original:
SELECT s.country_area AS country, SUM(s.quantity) AS quantity, m.maxyear AS maxyear

v2:
SELECT s.country_area AS country, CAST(SUM(s.quantity) AS CHAR) AS quantity, m.maxyear AS maxyear

edit2:

v3: 
SELECT s.country_area AS country, CAST(SUM(s.quantity) AS CHAR CHARACTER SET utf8) AS quantity, m.maxyear AS maxyear
当我在对象上使用json.dumps时,

原始获取十进制错误 v2获取utf-8编码错误.. v2仍然得到utf-8编码错误..

1 个答案:

答案 0 :(得分:-1)

问题可能是由 country_area 字段中突出显示的字符引起的。

如果从SQL结果中获取字节字符串,则必须使用表的编码对其进行解码。

默认情况下,MySQL使用latin1_swedish_ci => ISO-8859-1 charset。

所以,你需要像这样解码:

s = b"bytes string with accentuated characters"
u = s.decode("ISO-8859-1")

您将获得unicode字符。