如果value为None,则插入Postgres json类型列的内容

时间:2018-06-19 01:51:38

标签: postgresql flask-sqlalchemy psycopg2

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

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

...

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

列中的值是字符串“null”而不是数据库类型null,它在数据库管理器中看起来像<null>。我认为它应该为None插入数据库类型null(请参阅此question)。

对于最佳实践,应该在json列中插入一个空的json值?

2 个答案:

答案 0 :(得分:2)

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

当您没有要存储的json文档时,请使用NULL / None,然后您可以使用相同的习惯用法选择或省略json所在的行{{1和其他类型的列一样。

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

更新

由于OP已经实现并且从提供的代码片段中可以明显看出,问题是由于json.dumps将字符串转换为None,然后将其插入到数据库中。

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

变化

NULL

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

答案 1 :(得分:0)

只需添加到此答案即可。如果该变量已设置且为空,例如

from psycopg2.extras import Json
someVar = None
foo = Json(someVar)

然后它将仍然添加null作为字符串。要解决此问题,请执行以下操作:

foo = Json(someVar) if someVar else None