postgresql - 如果值为无,则在 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 列中?
解决方案
我认为这NULL
是丢失数据的最佳实践,无论数据类型如何。
当您没有要存储的 json 文档时使用NULL
/ ,然后您可以使用相同的习惯用法来选择或省略 json 所在的行,就像处理其他类型的列一样。None
NULL
然而,这确实意味着当您获取记录时,您必须期望 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))