SQLAlchemy为postgres JSON列设置默认值

All*_*Lin 2 python postgresql json sqlalchemy

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

from sqlalchemy.dialects.postgresql import JSON

info = Column(JSON, default='{}')
info = Column(JSON, default={})
Run Code Online (Sandbox Code Playgroud)

这些都不奏效.

taf*_*fit 7

如果有人像我一样与default-columnserver_default结合使用JSONB,那么似乎有效的方法如下:

from sqlalchemy import text

info = Column(JSONB, default=text("'{}'::jsonb"), server_default=text("'{}'::jsonb"))
Run Code Online (Sandbox Code Playgroud)

上面的方法(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'>'或者function代替typelambda)。


Cau*_*ons 7

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

info = db.Column(JSON, nullable=False, server_default='{}')
Run Code Online (Sandbox Code Playgroud)


All*_*Lin 6

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

  • 同样,`default = dict`应该有效吗? (4认同)
  • 这似乎不再起作用,您是否使用了相同的解决方案? (2认同)
  • 我使用“default=dict”,它在功能上等同于 lambda。这对我使用 SQLAlchemy 1.3.x 仍然有效 (2认同)