我想将SQLAlchemy postgres JSON列的默认值设置为空字典。
from sqlalchemy.dialects.postgresql import JSON
info = Column(JSON, default='{}')
info = Column(JSON, default={})
这些都不起作用。
答案 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)
如果有人像default
和server_default
这样的人和一个JSONB
栏一起挣扎,那么看来可行的方法如下:
from sqlalchemy import text
info = Column(JSONB, default=text("'{}'::jsonb"), server_default=text("'{}'::jsonb"))
以上方法(default=dict
或default=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
。