我有一个关于添加具有一对多关系的记录的查询。你知道吗
首先,这里是我的模型,我与project/suite/case/step有一个层次化的一对多关系。你知道吗
class Project(Base):
"""Project model for reportr"""
__tablename__ = 'project'
id = Column(Integer, primary_key=True)
name = Column(String(80))
# Relationship definitions
test_suites = relationship("TestSuite", backref="test_suite")
def __repr__(self):
return '<Project %r>' % self.name
class TestSuite(Base):
"""Test suite model for reportr"""
__tablename__ = 'test_suite'
id = Column(Integer, primary_key=True)
name = Column(String(80))
# Relationship definitions
project_id = Column(Integer, ForeignKey("project.id"))
test_cases = relationship("TestCase", backref="test_case")
def __repr__(self):
return '<TestSuite %r>' % self.name
class TestCase(Base):
"""Test case model for reportr"""
__tablename__ = 'test_case'
id = Column(Integer, primary_key=True)
name = Column(String(80))
# Relationship definitions
test_suite_id = Column(Integer, ForeignKey("test_suite.id"))
test_steps = relationship("TestStep", backref="test_step")
def __repr__(self):
return '<TestCase %r>' % self.name
class TestStep(Base):
"""Test step model for reportr"""
__tablename__ = 'test_step'
id = Column(Integer, primary_key=True)
name = Column(String(80))
# Relationship definitions
test_case_id = Column(Integer, ForeignKey("test_case.id"))
def __repr__(self):
return '<TestCase %r>' % self.name
我有一个函数,它接受一个字典,然后使用SQLAlchemy将信息存储在数据库中。你知道吗
def save(results):
"""Process the JSON file and save in the database"""
test_json = json.load(results)
session = init_session()
for reportr in test_json['reportr']:
for project in reportr['project']:
prj = Project(name=project['name'])
session.add(prj)
print prj
for suite in project['test_suite']:
sui = TestSuite(name=suite['name'])
sui.project_id = [prj]
session.add(sui)
print sui
for case in suite['test_case']:
cas = TestCase(name=case['name'])
cas.test_suite_id = [sui]
session.add(cas)
print cas
for step in case['test_step']:
stp = TestStep(name=step['name'])
stp.test_case_id = [cas]
session.add(stp)
print stp
session.commit()
以TestSuite为例。。。你知道吗
目前,我得到一个InterfaceError
错误,因为我试图保存一个对象,而不是ID到project_id
ForeignKey中。。。如果我将prj.id
存储到该字段中,这是固定的,但是prj.id
直到我add()
和commit()
更改之后才会填充。你知道吗
根据我的经验,我不应该承诺任何事情,直到所有的处理,但似乎我不能建立没有它的关系?你知道吗
我的问题是,我是不是走错了路?我如何添加一个TestSuite
与一个父Project
和一些子TestCases
?你知道吗
谢谢你, 乔希
您可以在
add
之后调用session.flush()
,这将允许您返回db id:有关详细信息,请查看transaction management docs。你知道吗
相关问题 更多 >
编程相关推荐