Python 在sqlalchemy中插入父对象时插入子对象列表
我有一个SQLAlchemy父类和子类,如下所示。两者之间的关系是一对多关系Python 在sqlalchemy中插入父对象时插入子对象列表,python,sqlalchemy,Python,Sqlalchemy,我有一个SQLAlchemy父类和子类,如下所示。两者之间的关系是一对多关系 class Parent(): systemName = Column(type_=String(100), primary_key=True) startDate = Column(type_=DateTime) childs = relationship("Child") class Child(): systemName = Column(type_=Stri
class Parent():
systemName = Column(type_=String(100), primary_key=True)
startDate = Column(type_=DateTime)
childs = relationship("Child")
class Child():
systemName = Column(type_=String(100), primary_key=True)
name = Column(type_=String(100))
parentSystemName = Column(
String(100),
ForeignKey("Parents", ondelete="CASCADE")
)
我已将“childs”列为响应模型中的“Child”列表。所以,当我从数据库中为父对象获取数据时,响应如下-
{
"systemName":"62259fd1_79b5_42b9_8381_3c0f9a6be322",
"startDate":"2020-09-12T19:24:58.357000",
"childs":[
{
"systemName":"ee16d7df-748f-4766-8233-a2997adb09dd",
"name":"Child1",
"parentSystemName":"62259fd1_79b5_42b9_8381_3c0f9a6be322"
},
{
"systemName":"89306f60-9ec2-497a-a18c-8e2bebb682ee",
"name":"Child2",
"parentSystemName":"62259fd1_79b5_42b9_8381_3c0f9a6be322"
}
]
}
我想知道如何使用与上述相同的JSON结构(即父母中的子女列表)并将记录添加到数据库中
obj_in_data = jsonable_encoder(obj_in)
db_obj = self.model(**obj_in_data)
db.add(db_obj)
db.commit()
db.refresh(db_obj)
目前,当我尝试使用与上面使用的相同JSON结构插入数据时,我得到了一个错误-
属性错误:“dict”对象没有属性“\u sa\u instance\u state”挑剔:child的倍数是child 您的
家长
希望孩子
是孩子
实例的列表,但当然不是。一种可能的解决方法是使用\uuuu init\uuu()
函数并对其进行调整
class父对象():
systemName=列(类型=字符串(100),主键=True)
开始日期=列(类型=日期时间)
子女=关系(“子女”)
定义初始值(*args,**kwargs):
“”“如果传递了'children',则将其强制转换为'Child'数组`
实例,如果它们尚未
如果是夸尔格语中的“儿童”:
children=kwargs.pop('children',[])
kwargs[“儿童”]=[
Child(**Child_或_数据),如果是instance(Child_或_数据),则dict)else Child_或_数据)
对于子对象中的子对象(或子对象数据)
]
超级(自,父)。\uuuuu初始化(*args,**kwargs)
此代码在创建新的
父对象之前执行,获取子对象列表,查看它们是否是对象,如果是,则将它们转换为子对象,然后继续初始化的其余部分。挑剔:子对象的倍数是子对象
您的家长
希望孩子
是孩子
实例的列表,但当然不是。一种可能的解决方法是使用\uuuu init\uuu()
函数并对其进行调整
class父对象():
systemName=列(类型=字符串(100),主键=True)
开始日期=列(类型=日期时间)
子女=关系(“子女”)
定义初始值(*args,**kwargs):
“”“如果传递了'children',则将其强制转换为'Child'数组`
实例,如果它们尚未
如果是夸尔格语中的“儿童”:
children=kwargs.pop('children',[])
kwargs[“儿童”]=[
Child(**Child_或_数据),如果是instance(Child_或_数据),则dict)else Child_或_数据)
对于子对象中的子对象(或子对象数据)
]
超级(自,父)。\uuuuu初始化(*args,**kwargs)
此代码在创建新的父对象之前执行,获取子对象列表,查看它们是否是对象,如果是,则将它们转换为子对象,然后继续初始化的其余部分。您有什么代码抛出此错误?您是否先尝试初始化父对象的实例?像父对象(my_json_obj)
?还是你用了别的什么?我已经更新了我的问题并添加了代码。”JSU encoder’将模型转换为json,这与问题中提到的完全一样,db_obj是父sqlalchemy模型实例。我在第2行遇到一个错误。你有什么代码抛出这个错误?您是否先尝试初始化父对象的实例?像父对象(my_json_obj)
?还是你用了别的什么?我已经更新了我的问题并添加了代码。”JSU encoder’将模型转换为json,这与问题中提到的完全一样,db_obj是父sqlalchemy模型实例。我在第2行遇到一个错误。