SQLAlchemy 0.9 添加了对 PostgreSQL 的 JSON 数据类型的内置支持。但是当我定义一个对象映射器时,它有一个 JSON 字段并将其值设置为一个完美的 JSON 字符串:
json = '{"HotCold":"Cold,"Value":"10C"}'
数据库获取表单中的数据:
"{\"HotCold\":\"Cold\",\"Value":\"10C\"}"
所有内部双引号都是反斜杠,但如果我从 python 字典设置 JSON:
json = {"HotCold": "Cold, "Value": "10C"}
我在数据库中获取的 JSON 数据为:
{"HotCold":"Cold,"Value":"10C"}
这是为什么呢?我是否必须以字典形式传递数据以使其与 SQLAlchemy JSON 支持兼容?
最佳答案
简短的回答:是的,你必须这样做。
SQLAlchemy 中的 JSON 类型用于将 Python 结构存储为 JSON。它有效地做到了:
database_value = json.dumps(python_value)
在商店和使用
python_value = json.loads(database_value)
您存储了一个字符串,然后将其转换为 JSON 值。字符串本身 包含 JSON 的事实只是一个巧合。不要存储 JSON 字符串,而是存储 JSON 可序列化的 Python 值。
一个快速演示来说明:
>>> print json.dumps({'foo': 'bar'})
{"foo": "bar"}
>>> print json.dumps('This is a "string" with quotes!')
"This is a \"string\" with quotes!"
请注意第二个示例如何应用完全相同的引号。
使用 JSON SQLAlchemy 类型在对象上存储额外的结构化数据; PostgreSQL 允许您在服务器端访问 SQL 表达式中的内容,而 SQLAlchemy 允许您在 Python 端以 Python 值的形式完全访问内容。
请注意,您应该始终在对象上重新设置 whole 值。不要改变其中的值并期望 SQLAlchemy 自动为您检测到更改;查看PostgreSQL JSON type文档。
关于python - 为什么 sqlalchemy 添加\到“为 postgresql json 字段提供完美的 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21039053/