更新Mysql JSON字段

时间:2017-01-26 07:39:03

标签: django django-models django-mysql

我使用的是django 1.8.9和MySQL 5.7.17。我有一张下表:

+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| brand    | varchar(255) | YES  | MUL | NULL    |                |
| new_info | json         | YES  |     | NULL    |                |
| keywords | json         | YES  |     | NULL    |                |
| notes    | varchar(255) | YES  |     | NULL    |                |
| id       | mediumint(9) | NO   | MUL | NULL    | auto_increment |
+----------+--------------+------+-----+---------+----------------+

在django我有这个模型(JSONField来自django_mysql):

class info_by_kw(Model):
    brand = ForeignKey(Brand, on_delete=CASCADE, db_column='brand')
    # new_info = JSONField(blank=True, null=True)
    keywords = JSONField(blank=True, null=True)
    notes = CharField(max_length=255, blank=True, null=True)

当保存数据时,我得到一个非常有意义的错误:( - 1,'错误完全打击')。无论如何,它最终出现在以下SQL语句中:

UPDATE `products_info_by_kw` SET `brand` = _binary'BINGO!', `keywords` = _binary'[[\\"Tomato\\", \\"Madness\\"]]', `notes` = _binary'' WHERE `products_info_by_kw`.`id` = 48;

或多或少的预期结果:

ERROR 3144 (22032): Cannot create a JSON value from a string with CHARACTER SET 'binary'.

简短搜索给出了这个结果:https://code.djangoproject.com/ticket/26140,所以也许这是正确的事情,我的mysql(或django)配置错误。有没有人知道如何解决它?

1 个答案:

答案 0 :(得分:0)

原来,https://github.com/PyMySQL/mysqlclient-python最近在_binary前缀周围有一些激动(如果不是大惊小怪的话)。因此我使用的版本1.3.8受其影响,而在1.3.9中,更改已被恢复。 我的代码现在按预期工作。