gpt4 book ai didi

python - 用于 MySQL 的 Peewee ORM JSONField

转载 作者:可可西里 更新时间:2023-11-01 07:49:29 27 4
gpt4 key购买 nike

我有一个 peewee像这样的模型:

class User(peewee.Model):
name = peewee.CharField(unique=True)
some_json_data = peewee.CharField()
requested_at = peewee.DateTimeField(default=datetime.now())

我知道 peewee 不支持 MySQL 数据库的 JSONField,但无论如何,我认为如果我可以将它转换为字符串格式并保存到数据库,我可以按原样检索它。

比方说,这是我正在写入数据库的 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\'}]'

尝试加载一个 simplejson 会给我这样的错误:

JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)

在将 json 数据输入到数据库之前,我已经尝试过 json 转储,看看是否可以正常工作,但我仍然没有运气。

我正在寻找涉及 peewee 的 custom field 的解决方案选项,我想坚持我的 MySQL。有人可以指导我吗?

最佳答案

您的代码中可能发生的情况是 Peewee 正在对值调用 str()(或 unicode())而不是将其转储到 JSON,因此 Python 字符串表示正在保存到数据库中。要手动执行 JSON,只需 import json 然后在设置字段时调用 json.dumps(obj)json.loads(db_value) 当你获取字段时。

看起来有一个为某些数据库(SQLite、PostgreSQL?)定义的 Peewee playhouse 扩展,它定义了一个 JSONField 类型——参见 JSONField docs here .

或者,我认为定义一个自动执行 json 加载/转储的自定义 JSONField 类型并不困难。 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com