SQLAlchemy: ошибка не может генерировать событие измененияPython

Программы на Python
Anonymous
SQLAlchemy: ошибка не может генерировать событие изменения

Сообщение Anonymous »

Итак, у меня есть два класса dto:

Код: Выделить всё

class ProjectDTO(DB):
__tablename__ = 'projects'
__table_args__ = {'schema': 'postgres'}

id = Column(Integer, primary_key=True)
serial = Column(UUID(as_uuid=True), unique=True, nullable=False, server_default=text('(uuid_generate_v4())'))
team_engineer_serial = Column(UUID(as_uuid=True), ForeignKey('postgres.team.serial'))
team_tester_serial = Column(UUID(as_uuid=True), ForeignKey('postgres.team.serial'))

statuses = relationship('ProjectStatusDTO', back_populates='project', foreign_keys='[ProjectStatusDTO.project_serial]')
team_engineer = relationship('TeamDTO', backref='project_as_engineer', foreign_keys=[team_engineer_serial])
team_tester = relationship('TeamDTO', backref='project_as_tester', foreign_keys=[team_tester_serial])

class ProjectStatusDTO(DB):
__tablename__ = 'project_statuses'
__table_args__ = {'schema': 'postgres'}

id = Column(Integer, primary_key=True)
serial = Column(UUID(as_uuid=True), unique=True, nullable=False, server_default=text('(uuid_generate_v4())'))
project_serial = Column(UUID(as_uuid=True), ForeignKey('postgres.projects.serial'))
name = Column(String(255), nullable=False)
is_initial = Column(Boolean)

project = relationship('ProjectDTO', back_populates='statuses', foreign_keys=[project_serial])
Затем у меня есть функция для получения сведений о проекте, включая список статусов, с помощью функции ниже.

Код: Выделить всё

    def _get_project(self, ctx: Context, project_code: str = None, team_engineer_serial: str = None, with_initial_status: bool = False):
if not project_code and not team_engineer_serial:
raise BadRequestError("one of 'project_code' or 'team_engineer_serial' must be provided")

query = ctx.get_db_catalog().query(ProjectDTO)

if project_code:
query = query.filter(ProjectDTO.code == project_code)
else:
query = query.filter(ProjectDTO.team_engineer_serial == team_engineer_serial)

if with_initial_status:
query = query.join(ProjectDTO.statuses).filter(ProjectStatusDTO.is_initial == True)

query = query.options(
joinedload(ProjectDTO.statuses),
joinedload(ProjectDTO.team_engineer)
)

result = query.first()

if not result:
return None

return ProjectEntity().from_dto(result)
К сожалению, приведенная выше функция выдает ошибку. orm_exc.ObjectDereferencedError( sqlalchemy.orm.exc.ObjectDereferencedError: невозможно выдать событие изменения для атрибута «ProjectDTO.statuses» — родительский объект типа < ProjectDTO> был удален.
Что не так с моей функцией?
Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/788 ... ange-event

Вернуться в «Python»