Var*_*rma 3 python mysql orm python-2.7 peewee
我有一个像这样的peewee模型:
class User(peewee.Model):
name = peewee.CharField(unique=True)
some_json_data = peewee.CharField()
requested_at = peewee.DateTimeField(default=datetime.now())
Run Code Online (Sandbox Code Playgroud)
我知道peewee不支持MySQL数据库的JSONField,但无论如何,如果我可以将它转换为字符串格式并保存到db,我可以按原样检索它.
比方说,这是我写给DB的JSONField:
[
{
'name': 'abcdef',
'address': 'abcdef',
'lat': 43176757,
'lng': 42225601
}
]
Run Code Online (Sandbox Code Playgroud)
当我获取此(JSONField)数据时,输出如下:
u'[{u\'name\': u\'abcdef\', u\'address\': u\'abcdef\', u\'lat\': 43176757, u\'lng\': 42225601\'}]'
Run Code Online (Sandbox Code Playgroud)
尝试simplejson加载这个给我一个错误,如下所示:
JSONDecodeError:期望用双引号括起的属性名:第1行第3列(char 2)
我已经尝试过json数据的json转储,然后再将它输入数据库并查看是否有效,但我仍然没有运气.
我正在寻找一个涉及peewee 自定义字段选项的解决方案,我想坚持我的MySQL.有人可以指导我吗?
您的代码中可能发生的事情是Peewee正在调用str()
(或unicode()
)值而不是将其转储到JSON,因此Python字符串表示被保存到数据库中.要手动执行JSON,只需在设置字段时以及在获取字段时import json
调用.json.dumps(obj)
json.loads(db_value)
看起来有一个Peewee playhouse扩展为某些定义了JSONField
类型的数据库(SQLite,PostgreSQL?)定义- 请参阅这里的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)
Run Code Online (Sandbox Code Playgroud)