SQLAlchemy 0.9添加了对PostgreSQL JSON数据类型的内置支持。但是当我定义了一个对象映射器,它有一个JSON字段,并将其值设置为一个完美的JSON字符串:
json = '{"HotCold":"Cold,"Value":"10C"}'
数据库以以下形式获取数据:
^{pr2}$所有内部双引号都是反斜杠,但是如果我从python dict设置JSON:
json = {"HotCold": "Cold, "Value": "10C"}
数据库中的JSON数据如下:
{"HotCold":"Cold,"Value":"10C"}
为什么?我是否必须以dict形式传递数据以使其与SQLAlchemy JSON支持兼容?在
嗯,但我不想像
json.loads()
那样做三次往返,传递给SQLAlchemy,后者会执行json.dumps()
,然后Postgres会再次进行解组。在因此,我创建了一个元数据表,将jsonb列类型指定为Text。现在我获取我的json字符串,SQLALchemy传递它们,Postgres将它们存储为jsonb对象。在
其中document是字符串,而不是python对象。在
今天我遇到了类似的情况:
查看Python代码,它将JSONB字段值设置为:
^{pr2}$在我把json.dumps文件(…)只需:
在数据库中一切看起来更好:没有更多额外的\or“。在
我再一次意识到Python和SQLAlchemy已经 注意细节,比如json.dumps文件. 代码越少,满意度越高。在
简而言之:是的,你必须这样做。在
SQLAlchemy中的JSON类型用于将Python结构存储为JSON。它有效地做到了:
在商店里,和使用
^{pr2}$您存储了一个字符串,并将其转换为JSON值。字符串本身包含JSON只是巧合。不要存储JSON字符串,存储可JSON序列化的Python值。在
一个快速演示来说明:
请注意第二个示例如何应用完全相同的引用。在
使用JSON SQLAlchemy类型在对象上存储额外的结构化数据;PostgreSQL允许您在服务器端访问SQL表达式中的内容,SQLAlchemy在Python端允许您以Python值的形式完全访问内容。在
请注意,您应该始终在对象上重新设置整个值。不要改变它内部的值,并期望SQLAlchemy自动检测到更改;请参阅PostgreSQL JSON type文档。在
相关问题 更多 >
编程相关推荐