아래와 같이 데이터가 있는 데이터베이스에 sqlmodel을 사용하여 레코드를 삽입하려고 합니다. 색상과 다양한 위치를 가진 집 개체입니다. 위치는 또한 많은 주택과 연결됩니다. 다음으로 입력:
으아아아다음은 제가 하려는 작업의 재현 가능한 예입니다.
으아아아문제는 이 코드를 실행할 때 집 개체와 함께 중복된 위치 개체를 삽입하려고 한다는 것입니다.
여기에서 relationship
,因为它使访问 house.locations
사용하기가 정말 쉬워졌으면 좋겠습니다.
하지만 중복된 위치를 삽입하려는 시도를 막는 방법을 알 수 없습니다. 이상적으로는 get_or_create
위치를 수행하는 매퍼 기능이 있어야 합니다.
내가 본 것 중 가장 좋은 것은 sqlalchemy의 관련 프록시입니다. 하지만 sqlmodel은 이를 지원하지 않는 것 같습니다.
이것을 달성하는 방법을 아는 사람이 있나요? sqlmodel 대신 sqlalchemy를 사용하여 이를 수행하는 방법을 알고 있다면 귀하의 솔루션을 보고 싶습니다. 저는 아직 이 프로젝트를 시작하지 않았으므로 삶이 더 편해진다면 sqlalchemy를 사용하는 것이 좋을 것 같습니다.
저도 sa_relationship_kwargs
좋아요
그러나 이렇게 하면 관련 항목이 houselocationlink
테이블에 추가되지 않습니다.
어떤 조언이라도 대단히 감사하겠습니다. 비록 그것이 내 접근 방식을 완전히 바꾸는 것을 의미하더라도.
감사합니다!
귀하가 sqlalchemy
사용할 의향이 있다고 언급했기 때문에 이 솔루션을 작성하고 있습니다. 언급한 대로 연결된 프록시가 필요하지만 "고유 개체"도 필요합니다. 저는 개인적 선호에 따라 논리를 크게 변경하지 않고 비동기 쿼리(동기화 대신) 기능을 수행하도록 이를 조정했습니다.
어설션이 통과되고 고유 제약 조건이 위반되지 않으며 다중 삽입이 없음을 알 수 있습니다. 나는 이 코드의 "중요한" 측면을 언급하는 몇 가지 인라인 주석을 남겼습니다. 이 코드를 여러 번 실행하면 새 house
개체와 해당 house
对象和相应的 houselocationlink
,而没有添加新的 location
만 추가되고 새 location
개체는 추가되지 않는 것을 알 수 있습니다. 이 동작을 캐시하기 위해 키-값 쌍당 하나의 쿼리만 수행됩니다.
위 내용은 관계의 한쪽이 데이터베이스에 이미 존재하는 경우 SQLModel을 사용하여 다대다 관계 개체 삽입의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!