如何使用 SQLAlchemy 将新字典添加到字典列表
How to add new dict to list of dict with SQLAlchemy
假设这是一个示例 json。
{
"id": 1,
"details": [
{
"a": "100",
}
]
}
我想要的结果是将 {'b': '200'}
添加到详细信息中,它看起来像这样。
{
"id": 1,
"details": [
{
"a": "100",
},
{
"b": "200",
},
]
}
在我的文件里,我已经试了很多次了,还是不行那么,如何用sqlalchemy添加dict
class Models(Base):
__tablename__ = 'Table'
id = Column(Integer, primary_key=True)
details = Column(JSONB, nullable=False, server_default='[]')
@router.post("/post2")
async def post2(id: int = 1):
session = Session()
user = session.query(Models).filter(
Models.id == id).first()
for var in user.details:
var.append({"b": "200"})
session.commit()
return user
您可能需要使用 flag_modified
,因为您无法直接更新 JSONB:
from sqlalchemy.orm.attributes import flag_modified
@router.post("/post2")
async def post2(id: int = 1):
session = Session()
user = session.query(Models).filter(
Models.id == id
).first()
user.details.append({"b": "200"})
flag_modified(user, "details")
session.commit()
return user
或重写整个集合:
import copy
@router.post("/post2")
async def post2(id: int = 1):
session = Session()
user = session.query(Models).filter(
Models.id == id
).first()
details = copy.deepcopy(user.details)
details.append({"b": "200"})
user.details = details
session.commit()
return user
这里是类似的主题:
假设这是一个示例 json。
{
"id": 1,
"details": [
{
"a": "100",
}
]
}
我想要的结果是将 {'b': '200'}
添加到详细信息中,它看起来像这样。
{
"id": 1,
"details": [
{
"a": "100",
},
{
"b": "200",
},
]
}
在我的文件里,我已经试了很多次了,还是不行那么,如何用sqlalchemy添加dict
class Models(Base):
__tablename__ = 'Table'
id = Column(Integer, primary_key=True)
details = Column(JSONB, nullable=False, server_default='[]')
@router.post("/post2")
async def post2(id: int = 1):
session = Session()
user = session.query(Models).filter(
Models.id == id).first()
for var in user.details:
var.append({"b": "200"})
session.commit()
return user
您可能需要使用 flag_modified
,因为您无法直接更新 JSONB:
from sqlalchemy.orm.attributes import flag_modified
@router.post("/post2")
async def post2(id: int = 1):
session = Session()
user = session.query(Models).filter(
Models.id == id
).first()
user.details.append({"b": "200"})
flag_modified(user, "details")
session.commit()
return user
或重写整个集合:
import copy
@router.post("/post2")
async def post2(id: int = 1):
session = Session()
user = session.query(Models).filter(
Models.id == id
).first()
details = copy.deepcopy(user.details)
details.append({"b": "200"})
user.details = details
session.commit()
return user
这里是类似的主题: