[英]SQLALchemy: Query a single key or subset of keys of a Postgres JSONB column
[英]Update single element in jsonb column with sqlalchemy core
我在表中有一个 jsonb 列,其中每个元素都是以下形式
{id: str, value: bool}
我想更新与 ID 匹配的单个(或多个)元素。 有没有一种惯用的方法可以使用 sqlalchemy核心(不是 ORM),而不需要读写整个列,或者手动构建 sql 查询?
基于这个答案,给定这个初始设置:
tbl = sa.Table(
't71821876',
sa.MetaData(),
sa.Column('id', sa.Integer, primary_key=True),
sa.Column('stuff', JSONB),
)
tbl.drop(engine, checkfirst=True)
tbl.create(engine)
with engine.begin() as conn:
ins = tbl.insert()
conn.execute(
ins, [{'stuff': {'id': str(n), 'value': False}} for n in range(3)]
)
我们可以像这样使用jsonb_set
* 进行更新:
with engine.begin() as conn:
stmt = (
sa.update(tbl)
.where(tbl.c.stuff['id'].astext == '0')
.values(
stuff=sa.func.jsonb_set(tbl.c.stuff, '{value}', json.dumps(True))
)
)
conn.execute(stmt)
该页面上的其他答案可以翻译成
with engine.begin() as conn:
stmt = (
sa.update(tbl)
.where(tbl.c.stuff['id'].astext == '1')
.values(stuff=tbl.c.stuff + json.dumps({'id': '1', 'value': True}))
)
conn.execute(stmt)
但它替换了所选行中的列,因此可能不符合您的标准。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.