首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Peewee for MySQL

Peewee for MySQL
EN

Stack Overflow用户
提问于 2016-11-11 18:08:40
回答 1查看 6.2K关注 0票数 7

我有一个像这样的小淘气模型:

代码语言:javascript
复制
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:

代码语言:javascript
复制
[
  {
    'name': 'abcdef',
    'address': 'abcdef',
    'lat': 43176757,
    'lng': 42225601
  }
]

当我获取这个(JSONField)数据时,输出如下:

代码语言:javascript
复制
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。有人能指引我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中有一个简单的例子

代码语言:javascript
复制
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)
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40553790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档