>  기사  >  백엔드 개발  >  관계의 한쪽이 데이터베이스에 이미 존재하는 경우 SQLModel을 사용하여 다대다 관계 개체 삽입

관계의 한쪽이 데이터베이스에 이미 존재하는 경우 SQLModel을 사용하여 다대다 관계 개체 삽입

WBOY
WBOY앞으로
2024-02-06 08:00:101297검색

当关系的一侧已存在于数据库中时,使用 SQLModel 插入多对多关系对象

질문 내용

아래와 같이 데이터가 있는 데이터베이스에 sqlmodel을 사용하여 레코드를 삽입하려고 합니다. 색상과 다양한 위치를 가진 집 개체입니다. 위치는 또한 많은 주택과 연결됩니다. 다음으로 입력:

으아아아

다음은 제가 하려는 작업의 재현 가능한 예입니다.

으아아아

문제는 이 코드를 실행할 때 집 개체와 함께 중복된 위치 개체를 삽입하려고 한다는 것입니다. 여기에서 relationship,因为它使访问 house.locations 사용하기가 정말 쉬워졌으면 좋겠습니다.

하지만 중복된 위치를 삽입하려는 시도를 막는 방법을 알 수 없습니다. 이상적으로는 get_or_create 위치를 수행하는 매퍼 기능이 있어야 합니다.

내가 본 것 중 가장 좋은 것은 sqlalchemy의 관련 프록시입니다. 하지만 sqlmodel은 이를 지원하지 않는 것 같습니다.

이것을 달성하는 방법을 아는 사람이 있나요? sqlmodel 대신 sqlalchemy를 사용하여 이를 수행하는 방법을 알고 있다면 귀하의 솔루션을 보고 싶습니다. 저는 아직 이 프로젝트를 시작하지 않았으므로 삶이 더 편해진다면 sqlalchemy를 사용하는 것이 좋을 것 같습니다.

저도 sa_relationship_kwargs좋아요

를 이용해 조정해 보았습니다. 으아아아

그러나 이렇게 하면 관련 항목이 houselocationlink 테이블에 추가되지 않습니다.

어떤 조언이라도 대단히 감사하겠습니다. 비록 그것이 내 접근 방식을 완전히 바꾸는 것을 의미하더라도.

감사합니다!


정답


귀하가 sqlalchemy 사용할 의향이 있다고 언급했기 때문에 이 솔루션을 작성하고 있습니다. 언급한 대로 연결된 프록시가 필요하지만 "고유 개체"도 필요합니다. 저는 개인적 선호에 따라 논리를 크게 변경하지 않고 비동기 쿼리(동기화 대신) 기능을 수행하도록 이를 조정했습니다.

으아아아

어설션이 통과되고 고유 제약 조건이 위반되지 않으며 다중 삽입이 없음을 알 수 있습니다. 나는 이 코드의 "중요한" 측면을 언급하는 몇 가지 인라인 주석을 남겼습니다. 이 코드를 여러 번 실행하면 새 house 개체와 해당 house 对象和相应的 houselocationlink,而没有添加新的 location만 추가되고 새 location 개체는 추가되지 않는 것을 알 수 있습니다. 이 동작을 캐시하기 위해 키-값 쌍당 하나의 쿼리만 수행됩니다.

위 내용은 관계의 한쪽이 데이터베이스에 이미 존재하는 경우 SQLModel을 사용하여 다대다 관계 개체 삽입의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제