python - 为什么 sqlalchemy 添加\到“为 postgresql json 字段提供完美的 JSON 字符串?

标签 python json postgresql sqlalchemy

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/

相关文章:

python Pandas : Lookup table by searching for substring

php - 使用 xmlhttprequest 检索 json 格式的数据

php - 尝试从数据库中获取 json 数据时获取 MYSQL 错误代码

python - 将带有 json.dumps 的 UTF-8 文本保存为 UTF-8,而不是作为\u 转义序列

sql - 子查询中的顺序是否保证得到保留?

python - 如何从彼此python中拆分表情符号?

python - 在python中的numpy数组中查找第一个有条件的元素的索引

python - 使用 NetworkX 绘制彩色树

java - Hibernate 和 PostgreSQL 中具有 UserType 的数组 --> MappingException

sql - 如何使用 hstore 进行 IN 查询?