我有一个像这样的peewee模型:
class User(peewee.Model):
name = peewee.CharField(unique=True)
some_json_data = peewee.CharField()
requested_at = peewee.DateTimeField(default=datetime.now())
我知道peewee不支持MySQL DB的JSONField,但是无论如何,尽管我可以将其转换为字符串格式并保存为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\'}]'
尝试一个简单的json负载给我这样的错误:
我已经尝试过将json数据进行json转储,然后再将其输入数据库并查看是否可以正常工作,但是我仍然没有运气。
我正在寻找一个涉及peewee的custom field选项的解决方案,并且我想保留我的MySQL。有人可以指导我吗?
最佳答案
您的代码中可能发生的情况是Peewee在值上调用str()
(或unicode()
),而不是将其转储到JSON,因此Python字符串表示形式已保存到数据库中。要手动执行JSON,只需设置import json
,然后在设置字段时调用json.dumps(obj)
,并在获取字段时调用json.loads(db_value)
。
好像有一个为某些数据库(SQLite,PostgreSQL?)定义的Peewee游戏室扩展定义了JSONField
类型-参见JSONField docs here。
另外,我认为定义一个自定义的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)
关于python - 适用于MySQL的Peewee ORM JSONField,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40553790/