SQLAlchemy为postgres JSON列设置默认值

时间:2016-08-15 19:07:13

标签: python json postgresql sqlalchemy

我想将SQLAlchemy postgres JSON列的默认值设置为空字典。

from sqlalchemy.dialects.postgresql import JSON

info = Column(JSON, default='{}')
info = Column(JSON, default={})

这些都不起作用。

4 个答案:

答案 0 :(得分:5)

使用default = lambda:{}有效。在评论中归功于univerio。

答案 1 :(得分:2)

我发现使用默认{}值定义JSON不为null(如果适用)的JSON列的最简单方法是(使用SQLAlchemy 1.3.x测试):

info = db.Column(JSON, nullable=False, default=dict, server_default='{}')

答案 2 :(得分:1)

最好只使用dict构造函数:

info = Column(JSON, default=dict)

另外,完美适用于其他类型:

created = Column(DateTime, default=datetime.utcnow)

答案 3 :(得分:0)

如果有人像defaultserver_default这样的人和一个JSONB栏一起挣扎,那么看来可行的方法如下:

from sqlalchemy import text

info = Column(JSONB, default=text("'{}'::jsonb"), server_default=text("'{}'::jsonb"))

以上方法(default=dictdefault=lambda: {})对我来说无效不起作用。特别是与除草剂合用。我总是得到错误:
sqlalchemy.exc.ArgumentError: Argument 'arg' is expected to be one of type '<class 'str'>' or '<class 'sqlalchemy.sql.elements.ClauseElement'>' or '<class 'sqlalchemy.sql.elements.TextClause'>', got '<class 'type'>'(对于lambda,则为function而不是type