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值?
答案 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