【发布时间】:2022-01-24 04:37:56
【问题描述】:
我正在尝试将有关创建、更新或删除记录的信息保存在每个表中。
目前我有以下:
class User(Base):
__tablename__ = "user"
id = Column(UUID, primary_key=True, index=True)
civil_title = Column(Enum(EnumTitle))
lastname = Column(String, index=True)
firstname = Column(String)
type = Column(Enum(EnumTypeUser))
hashed_password = Column(String, nullable=False)
is_active = Column(Boolean(), default=True)
is_superuser = Column(Boolean(), default=False)
created_at = Column(TIMESTAMP(timezone=False),server_default=func.now(), nullable=False)
created_by = Column(UUID, ForeignKey("user.id"))
created_by_rl = relationship("User", foreign_keys=[created_by])
updated_at = Column(DateTime)
updated_by = Column(UUID, ForeignKey("user.id"))
updated_by_rl = relationship("User", foreign_keys=[updated_by])
deleted_at = Column(DateTime)
deleted_by = Column(UUID, ForeignKey("user.id"))
deleted_by_rl = relationship("User", foreign_keys=[deleted_by])
practice_id = Column(UUID, ForeignKey("practice.id"))
practice = relationship("Practice", foreign_keys=[practice_id], back_populates="employees")
address_id = Column(UUID, ForeignKey("user_address.id"))
address = relationship("UserAddress",foreign_keys=[address_id], back_populates="users")
# items = relationship("Item", back_populates="owner")
contacts = relationship("UserContactDetail", back_populates="user")
schedules = relationship("Schedule", back_populates="user")
__mapper_args__ = {
"polymorphic_identity":"user",
"polymorphic_on":type
}
和
class UserAddress(Base):
__tablename__ = "user_address"
id = Column(UUID, primary_key=True, index=True)
street = Column(String)
streetnumber = Column(String)
town = Column(String)
cp = Column(Integer)
created_at = Column(TIMESTAMP(timezone=False),server_default=func.now(), nullable=False)
created_by = Column(UUID, ForeignKey("user.id"))
created_by_rl = relationship("User", foreign_keys=[created_by])
updated_at = Column(DateTime)
updated_by = Column(UUID, ForeignKey("user.id"))
updated_by_rl = relationship("User", foreign_keys=[updated_by])
deleted_at = Column(DateTime)
deleted_by = Column(UUID, ForeignKey("user.id"))
deleted_by_rl = relationship("User", foreign_keys=[deleted_by])
users = relationship("User", back_populates="address")
我遇到以下错误:
sqlalchemy.exc.AmbiguousForeignKeysError: Can't determine join between 'user_address' and 'user'; tables have more than one foreign key constraint relationship between them. Please specify the 'onclause' of this join explicitly.
如何确保不会发生此错误? 做这样的事情是个好习惯吗?
【问题讨论】:
标签: python sqlalchemy fastapi