【问题标题】:SQLAlchemy ORM one-to-many relationship is not loading all records from DBSQLAlchemy ORM 一对多关系未从数据库加载所有记录
【发布时间】:2011-07-07 01:36:27
【问题描述】:

使用 SqlAlchemy ORM,我一直在尝试在子表中具有“子”记录的父表之间建立一对多的关系。表和映射器声明如下。问题是,当应该有很多记录时,只有一个子记录从数据库读取到“children”属性中。

child_table = Table('child_table', metadata_obj,
                    Column('field_1', Integer, ForeignKey('parent_table.field_1'),
                           primary_key=True),
                    Column('field_2', String, ForeignKey('parent_table.field_2'),
                           primary_key=True),
                    autoload=True
mapper(Parent_Class, parent_table, properties={
       'children': relation(Child_Class, lazy=False, # Eager load
                            primaryjoin=and_(child_table.c.field_1==parent_table.c.field_1,
                                             parent_table.c.field_2==parent_table.c.field_2),
                            backref="parents"),
                        })

【问题讨论】:

    标签: python orm sqlalchemy


    【解决方案1】:

    问题出在 child_table 定义中。我只将具有外键关系的字段定义为 child_table 的主键的一部分。但是,这些字段(field_1 和 field_2)并不是完整的主键。因此,SQLAlchemy 似乎只加载了一行。我添加了 field_3 和 field_4 来完全定义 child_table 的主键,然后 SQLAlchemy 成功读取了所有记录。

    child_table = Table('child_table', metadata_obj,
                        Column('field_1', Integer, ForeignKey('parent_table.field_1'),
                               primary_key=True),
                        Column('field_2', String, ForeignKey('parent_table.field_2'),
                               primary_key=True),
                        Column('field_3', String, primary_key=True),
                        Column('field_4', String, primary_key=True),
                        autoload=True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-13
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 2013-05-02
      • 1970-01-01
      相关资源
      最近更新 更多