我有一个像这样的小淘气模型:
class User(peewee.Model):
name = peewee.CharField(unique=True)
some_json_data = peewee.CharField()
requested_at = peewee.DateTimeField(default=datetime.now())我知道peewee不支持用于JSONField db的MySQL,但是无论如何,如果我能够将它转换成字符串格式并保存到DB,我可以按原样检索它。
例如,假设这是我写给DB的JSONField:
[
{
'name': 'abcdef',
'address': 'abcdef',
'lat': 43176757,
'lng': 42225601
}
]当我获取这个(JSONField)数据时,输出如下:
u'[{u\'name\': u\'abcdef\', u\'address\': u\'abcdef\', u\'lat\': 43176757, u\'lng\': 42225601\'}]'尝试一个简单的负载会给我一个错误,如下所示:
JSONDecodeError:期待以双引号括起来的属性名称:第1行第3列(char 2)
在将json数据输入DB之前,我已经尝试过转储json数据,并查看某些内容是否有效,但我仍然对此没有任何进展。
我正在寻找一个解决方案,涉及到peewee的自定义字段选项,我想坚持我的MySQL。有人能指引我吗?
发布于 2016-11-15 18:40:58
您的代码中可能发生的是Peewee对值调用str() (或unicode()),而不是将其转储到JSON,因此Python表示被保存到数据库中。要手动执行JSON,只需在设置字段时调用import json,然后在设置字段时调用json.dumps(obj),在获取字段时调用json.loads(db_value)。
它看起来像是为某些数据库(SQLite,PostgreSQL?)定义了一个playhouse扩展。它定义了一个JSONField类型--参见JSONField文档在这里。
或者,我不认为很难定义一个自定义JSONField类型来自动加载/转储json。在playhouse/kv.py中有一个简单的例子
class JSONField(TextField):
def db_value(self, value):
return json.dumps(value)
def python_value(self, value):
if value is not None:
return json.loads(value)https://stackoverflow.com/questions/40553790
复制相似问题