SQLAlchemy一对多,添加一条记录

杜夫

我有一个关于添加具有一对多关系的记录的查询。

首先,这是我的模型,我与项目/套件/案例/步骤具有一对多的层次关系。

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_idForeignKey而出现错误...如果我将其存储prj.id在该字段中,prj.id该错误已得到解决,但是直到我add()所做commit()的更改才填充

根据我的经验,在所有内容处理完毕之前,我不应该提交任何东西,但是好像我不能在没有它的情况下建立关系?

我的问题是,我是否以错误的方式处理此问题?如何添加有TestSuite父母Project和孩子的TestCases

谢谢,乔希

清醒

您可以session.flush()在之后调用add这应该允许您获取数据库ID:

session.add(sui)
session.flush()
print sui.id

查看交易管理文档以获取更多详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ASP.NET MVC4中-我需要编辑一条记录并向其中添加许多(1对多)子记录(在顶层记录的“编辑”模式下)

来自分类Dev

PHP查询选择一条记录

来自分类Dev

仅返回一条记录

来自分类Dev

vim:如何复制一条记录

来自分类Dev

MySQL JOIN最后一条记录

来自分类Dev

插入一对多记录

来自分类Dev

mysql加入一对多最后一条记录

来自分类Dev

MySql中的上一条记录

来自分类Dev

批量处理一条记录

来自分类Dev

如何检查一条记录是否附加到另一条记录?

来自分类Dev

一条记录中的组数据(多对多)

来自分类Dev

SQLAlchemy中的一对多+一对关系?

来自分类Dev

Flask-SQLAlchemy更新一对多记录

来自分类Dev

自动提取一条记录

来自分类Dev

更新上一条记录的数据

来自分类Dev

使用Laravel返回一对多口才关系中的最后一条记录

来自分类Dev

SQLAlchemy一对多(多对多)关系

来自分类Dev

按日期获取具有多对一关系的多个表的最后一条记录

来自分类Dev

Graphviz点:如何更改多记录形状中的一条记录的颜色

来自分类Dev

读取文件的最后一条记录

来自分类Dev

上一条记录被公式省略

来自分类Dev

仅显示一条记录

来自分类Dev

分组多列时如何选择最大值或最后一条记录?

来自分类Dev

向记录添加结束日期,即下一条记录的开始日期(linq to sql)

来自分类Dev

PL-SQL - 一对多关系左连接中的第一条记录

来自分类Dev

从一条记录检索记录到另一条记录

来自分类Dev

查看每组的最后一条记录

来自分类Dev

添加记录时 MS-Access 更新第一条记录

来自分类Dev

如何在 Laravel 5.6 中显示多对多关系中的最后一条记录

Related 相关文章

热门标签

归档