首页 > 解决方案 > 如果值为无,则在 Postgres json 类型列中插入什么

问题描述

psycopg2 在插入 None 时将 null 插入列中。

...
foo=json.dumps(insertObj.get('foo', None)),

...

db.session.add(s)
db.session.commit()

列中的值是字符串“null”,而不是数据库管理器中的数据库null类型<null>。我认为它应该为 None 插入数据库类型 null (参见这个 问题)。

为了最佳实践,应该将什么插入到空 json 值的 json 列中?

标签: postgresqlflask-sqlalchemypsycopg2

解决方案


我认为这NULL是丢失数据的最佳实践,无论数据类型如何。

当您没有要存储的 json 文档时使用NULL/ ,然后您可以使用相同的习惯用法来选择或省略 json 所在的行,就像处理其他类型的列一样。NoneNULL

然而,这确实意味着当您获取记录时,您必须期望 json 列有时可能为空,这需要特殊处理,但同样,这与其他允许空值的列没有什么不同。

更新:

正如 OP 已经意识到并且从提供的代码片段中显而易见的那样,问题是 None 被 json.dumps 作为字符串转储,然后将其插入数据库。

psycopg2 为 postgresql 提供了一个 json 适配器,可以在这里使用。

改变

foo=json.dumps(insertObj.get('foo', None))

from psycopg2.extras import Json
foo= Json(insertObj.get('foo', None))

推荐阅读