2014-11-17 3 views
0

내가, 그들 사이에 또 ​​다른 외래 키 포인트가 하나가 "사용자"이고, 다른 하나는 "USER_ADDRESS"입니다, 두 가지 모델을 쓴 다음SQLAlchemy의, AmbiguousForeignKeysError

AmbiguousForeignKeysError 다음과 같은 질문 등장 관계 User_address.user에 대한 상위/하위 테이블 사이 - 테이블을 링크하는 여러 외부 키 경로가 있습니다. 'foreign_keys'인수를 지정하여 상위 테이블에 대한 외래 키 참조를 포함하는 것으로 계산해야하는 열의 목록을 제공하십시오. 이 문제

답변

0

user_address.user_iduser 참조하기 때문에 이것은 mutually-dependent 관계의 예를 해결하는 방법

class User(Base): 
    __tablename__ = 'user' 
    id = Column(Integer, primary_key=True) 
    phone = Column(String, nullable=False) 
    password = Column(String, nullable=False) 

    nickname = Column(String) 


    default_address_id = Column(Integer,ForeignKey('user_address.id')) 
    default_address = relationship('User_address') 


class User_address(Base): 
    __tablename__ = 'user_address' 
    id = Column(Integer, primary_key=True) 
    user_id = Column(Integer, ForeignKey('user.id'), nullable=False) 
    user = relationship('User', backref='addresses') 
    address = Column(String, nullable=False) 
    lng = Column(Integer, nullable=False) 
    lat = Column(Integer, nullable=False) 

하지만 user.default_address_iduser_address을 말한다.

from sqlalchemy import Integer, String, ForeignKey, Column 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship 

Base = declarative_base() 

class User_address(Base): 
    __tablename__ = 'user_address' 
    id = Column(Integer, primary_key=True) 
    user_id = Column(Integer, ForeignKey('user.id'), nullable=False) 
    address = Column(String, nullable=False) 
    lng = Column(Integer, nullable=False) 
    lat = Column(Integer, nullable=False) 

class User(Base): 
    __tablename__ = 'user' 
    id = Column(Integer, primary_key=True) 
    phone = Column(String, nullable=False) 
    password = Column(String, nullable=False) 
    nickname = Column(String) 

    default_address_id = Column(Integer,ForeignKey('user_address.id')) 
    addresses = relationship(User_address, backref='user', 
          primaryjoin= 
           id==User_address.user_id 
          ) 

    default_address = relationship(User_address, 
            primaryjoin= 
             default_address_id==User_address.id, 
            post_update=True) 

AmbiguousForeignKeysError 해결에 대한 트릭에 조인 조건 SQL은 어떤 명시 적 관계 매퍼를 알려주는 primaryjoin 인수가 :

설명서의 예를 다음과 사용 사례에 적응는 다음과 같이 생성 용도.