3

所以我有以下模型

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

有人知道这里出了什么问题吗?

4

2 回答 2

3

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

OP 没有列出他的数据库连接字符串,但也许他正在使用“use_unicode=0”设置进行连接?

我是,我最近遇到了相同的类型转换错误。似乎应该可以将字节字符串转换为十进制,也许这在某人的待办事项列表中:),但在那之前我可以分享对我有用的解决问题的方法:

连接到 mysql 时(通过 pymysql 和 python 3.4.1)设置 charset=utf8 属性(假设您想要该属性,您可能应该这样做)但不要设置 use_unicode=0 属性。我根据当前 (0.9) sqlalchemy 文档的建议设置了该属性,该文档说它会“快得多”。更快但损坏不是改进:(。也许该建议仅适用于 python2.x 用户?考虑到 pymysql 如何尝试成为 python 3.x 的热交换 MySqlDB,这有点令人困惑,但 python 的 unicode 和字符串处理有在 2.x 和 3.x 之间变化,所以......

在不深入 pymysql 的情况下,我假设使用 python3 “use_unicode”意味着 char 字段作为 python 本机(unicode)字符串而不是“字节字符串”返回,内容编码为 utf8。设置“use_unicode=0”,你会得到字节字符串,从而得到 TypeError。

无论如何,这对我有用;希望这可以帮助其他看到此错误的人。

于 2014-09-03T01:50:53.557 回答
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())
于 2020-05-14T09:39:08.830 回答