SQLAlchemy ORM一对多关系未加载来自DB的所有记录

时间:2011-07-07 01:36:28

标签: python orm sqlalchemy

使用SqlAlchemy ORM,我一直在尝试在子表中具有“子”记录的父表之间建立一对多关系。表和映射器声明如下。问题是,当应该有很多记录时,只有一个子记录从DB读入“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"),
                        })

1 个答案:

答案 0 :(得分:0)

问题出在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