我有一个关于添加具有一对多关系的记录的查询。
首先,这是我的模型,我与项目/套件/案例/步骤具有一对多的层次关系。
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而不是ID存入project_id
ForeignKey而出现错误...如果我将其存储prj.id
在该字段中,prj.id
则该错误已得到解决,但是直到我add()
和所做commit()
的更改才填充。
根据我的经验,在所有内容处理完毕之前,我不应该提交任何东西,但是好像我不能在没有它的情况下建立关系?
我的问题是,我是否以错误的方式处理此问题?如何添加有TestSuite
父母Project
和孩子的TestCases
?
谢谢,乔希
您可以session.flush()
在之后调用,add
这应该允许您获取数据库ID:
session.add(sui)
session.flush()
print sui.id
查看交易管理文档以获取更多详细信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句