如何在sqlAlchemy(postgreSQL)中为JSONB列设置更复杂的默认值



我正在向JSONB类型的表添加一个新列,但我找不到将默认值设置为空对象以外的任何值所需的格式。

我该如何做到这一点?

目前,我的代码类似于:new_column = db.Column(JSONB, server_default=db.text("'{}'"), nullable=False)

我试过几种我认为可能是直观的处理方式。但到目前为止,它们只是在运行时出错。

示例1:new_column = db.Column(JSONB, server_default=db.text("'{'enabled': True}'"), nullable=False)

示例2:new_column = db.Column(JSONB, server_default=db.text("'{enabled: True}'"), nullable=False)

我想知道解决方案是否不是传递一个Python知道会转换为JSON的东西,而不是已经JSON编码的东西:

new_column = db.Column(JSONB, server_default={'enabled': True}, nullable=False)

也许你也需要设置常规默认值:

default = {'enabled': True}
new_column = db.Column(JSONB, default=default, server_default=default, nullable=False)

如果这些建议没有帮助,你可能需要发布错误消息,以便人们更好地了解问题所在"它抛出一个错误";这无助于理解哪里出了问题,而这对于找出如何让事情正确进行至关重要。

Ilja Everilä的答案就是答案。在python中,我不得不将代码行格式化为:

server_default=db.text("'{"enabled": "true"}'")

如果你不想要转义字符,Tripple引号也可以,但这在我看来更好

仍然不确定如何传递booleen值true而不是字符串。但这是另一个时间的问题。

最新更新