Django错误:不支持从字节到十进制的转换。

4

我有以下这个模型:

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。

有人对这里出了什么问题有想法吗?


1
你能否发布你的整个模型和 admin.py 文件? - Burhan Khalid
我非常确定这是出错的部分。我从我的项目中提取了它并创建了一个新项目来测试模型,但它仍然给我相同的错误。 - Derekzs
使用MySQLdb代替PyMySQL。 - Burhan Khalid
但是目前它不支持Python 3。 - Derekzs
然后使用Python 2.7.5。 - Burhan Khalid
2个回答

4
经过11个月的时间,我希望原作者找到了一个解决方法(比切换到Python 2更好)。
原作者没有列出他的数据库连接字符串,但是也许他正在使用“use_unicode = 0”设置进行连接?
我曾经也遇到过同样的类型转换错误。似乎应该可以将字节字符串转换为十进制数,也许这是某个人的待办事项 :), 但在此之前,我可以分享一下对我有用的解决方法:
当连接到mysql(通过pymysql和python 3.4.1)时,请设置charset = utf8属性(假设您想要该属性,您可能应该),但是不要设置use_unicode = 0属性。我根据当前(0.9)sqlalchemy文档的建议设置了该属性,文档说它会“快得多”。但是,快而错误并不是一种改进 :(。也许这个建议只针对Python 2.x用户?鉴于pymysql试图成为Python 3.x的可热插拔MySqlDB,这有点令人困惑,但是Python的Unicode和字符串处理在2.x和3.x之间发生了变化,因此...
没有深入研究pymysql,我认为在Python3中,“use_unicode”意味着char字段以本地的Python(unicode)字符串形式返回,而不是“byte strings”,其内容编码为utf8。设置“use_unicode = 0”,您将获得字节字符串,从而出现TypeError。
总之,这对我很有用;希望这可以帮助看到此错误的其他人。

我在使用 trio-mysql 时遇到了这个问题。结果发现,1.0.3(目前的最新稳定版)存在一个bug,文档中指出 use_unicode 默认为 true,但实际上并不是。 - Juraj Fiala

1

嗨,Max!在撰写下一个问题之前,请先熟悉一下如何回答问题。祝您在 Stack Overflow 上玩得愉快 :) - Diggy.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接