Django错误:不支持从字节到Decimal的转换

时间:2013-10-03 07:22:40

标签: python mysql django

所以我有以下模型

class Stock(models.Model):
    name = models.CharField(max_length=50)
    unit_measure = models.CharField(max_length=10)
    unit_price = models.DecimalField(max_digits=10, decimal_places=2)

当我尝试在Django的管理站点中添加该模型的实例时,它会给我以下错误

(<class 'TypeError'>, TypeError('conversion from bytes to Decimal is not supported',))

Exception Location: /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/PyMySQL-0.5-py3.3.egg/pymysql/connections.py in defaulterrorhandler, line 209

但是当我使用phpmyadmin查找我的数据库时,数据已成功插入表中。

我正在使用Django1.5 + Python3.3 + MySQL5.5 + PyMySQL

有人对这里出了什么问题有所了解吗?

2 个答案:

答案 0 :(得分:3)

11个月后,我希望原始海报找到一个解决方法(比切换到python 2更好)。

OP没有列出他的数据库连接字符串,但也许他正在使用&#34; use_unicode = 0&#34;设置他的连接?

我是,我最近遇到了同样的类型转换错误。看起来它应该可以从字节字符串转换为Decimal,也许这是在某人的todo列表:),但在那之前我可以分享解决问题的方法:

当连接到mysql(通过pymysql和python 3.4.1)时,设置charset = utf8属性(假设您需要该属性,您可能应该这样做),但不要设置use_unicode = 0属性。我根据当前(0.9)sqlalchemy文档的建议设置了该属性,该文档表示它会更快。&#34;更快但是破坏了一个改进:(。也许这个建议仅适用于python2.x用户?考虑到pymysql如何尝试热插拔MySqlDB for python 3.x,它有点令人困惑,但python& #39; s unicode&amp; string处理在2.x和3.x之间发生了变化,所以......

如果不深入pymysql,我认为使用python3&#34; use_unicode&#34;表示char字段作为python本机(unicode)字符串返回,而不是&#34;字节字符串&#34;,内容编码为utf8。设置&#34; use_unicode = 0&#34;你得到字节串,因此得到TypeError。

Anway,这对我有用;希望这有助于其他看到此错误的人。

答案 1 :(得分:0)

我在SQLite 3中遇到了同样的问题,我发现的解决方案在书(https://books.google.de/books?id=eLKdDwAAQBAJ&lpg=PA394&ots=xBGSOLY4Ue&dq=python%20sqlite%20byte%20to%20decimal&hl=de&pg=PA394#v=onepage&q&f=false)中提到过

def convert_decimal(bytes)
     return decimal.Decimal(bytes.decode())