SQLAlchemy ORM отношение один ко многим не загружает все записи из БД - PullRequest
0 голосов
/ 07 июля 2011

Используя 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"),
                        })

1 Ответ

0 голосов
/ 07 июля 2011

Проблема была в определении 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...