user_address.user_id
가 user
참조하기 때문에 이것은 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_id
는
user_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 인수가 :
설명서의 예를 다음과 사용 사례에 적응는 다음과 같이 생성 용도.