Inflearn brand logo image

인프런 커뮤니티 질문&답변

moljin님의 프로필 이미지
moljin

작성한 질문수

FastAPI: Python으로 3배 빠르게, 2배 정확한, 10배 빠른 API 만들기

26강 에러발생: 해결방법 알려주세요.

해결된 질문

작성

·

41

0

26강에서 User model를 만들고, Task model의 관계 설정까지 하고 env.py에서 User를 임포트하고 난후 alembic revision --autogenerate를 실행하고, alembic upgrade head 를 실행하면 User 테이블과 Task 모델의 관계설정은 잘 만들어 졌지만,

 

아래에 보이는 것처럼, 제약조건에 name을 지정하라고 나옴니다.

그래서 name을 지정하고 db를 삭제하고, alembic을 초기화된 상태로 만든 후에 다시 똑같은 과정을 거쳐 실행햇는데, 두번째 alembic revision --autogenerate 을 실행하면, sqlalchemy.exc.NoReferencedColumnError: Could not initialize target column for ForeignKey 'users.id' on table 'tasks': table 'users' has no column named 'id' 이런 오류가 나타납니다.

 

자꾸 자꾸 계속해서 다시 해봐도 제약조건에 이름을 넣으라고 나오고, 그것을 수정하면 users에 id가 없다는 둥 계속 똑같이 오류가 나옵니다. 해결 방법은 무엇일까요? 완전히 새로 해봐도 똑같은 오류만 계속 반복됩니다.

 

image.png

답변 3

1

moljin님의 프로필 이미지
moljin
질문자

오~~~ 인프런 AI 인턴님!

대단하십니다. name을 외래키 밖에 적었었네요... 외래키 안에 넣엇더니 잘 되는군요... 감사합니다. 아래의 차이가 그런 걸 만들었었네요~~^^

owner_id = Column(Integer, ForeignKey('users.id'), name='fk_user_task', nullable=False)

이처럼 하면 안되고... 아래 처럼 외래키 안에 이름을 넣어야 하는 군요..

owner_id = Column(Integer, ForeignKey('users.id', name='fk_user_task'), nullable=False)

0

해여님의 프로필 이미지
해여
지식공유자

안녕하세요 강사해여입니다!

인프런 AI인턴님이 대답해주셔서 다행이네요!

열정적인 강의 수강 감사드립니다!
👍

0

안녕하세요, 인프런 AI 인턴입니다. moljin님.

현재 발생하고 있는 문제는 Alembic을 사용하여 SQLAlchemy 모델을 마이그레이션할 때, 외래 키 설정에 대한 문제로 보입니다. 이를 해결하기 위해 다음과 같은 몇 가지 방법을 고려해볼 수 있습니다:

  1. 제약 조건 이름 설정:
    SQLAlchemy 모델에서 외래 키 제약 조건에 이름을 지정해 줄 필요가 있습니다. 이는 ForeignKey 객체를 사용할 때, 다음과 같이 name 속성을 명시하여 해결할 수 있습니다.
   from sqlalchemy import Column, Integer, String, ForeignKey
   from sqlalchemy.orm import relationship
   
   class Task(Base):
       __tablename__ = 'tasks'
       id = Column(Integer, primary_key=True, index=True)
       owner_id = Column(Integer, ForeignKey('users.id', name='fk_user_task'), nullable=False)
       owner = relationship("User", back_populates="tasks")

   class User(Base):
       __tablename__ = 'users'
       id = Column(Integer, primary_key=True, index=True)
       tasks = relationship("Task", back_populates="owner")
  1. Alembic 버전 파일 확인:
    기존에 생성된 alembic_version 파일 중 누락된 또는 손상된 부분이 있는지 확인하시고, 해당 부분을 삭제한 후 다시 생성해보세요.

  2. 데이터베이스 스키마 초기화:
    문제가 계속 발생한다면, 데이터베이스를 완전히 삭제하고, 다시 생성한 다음 처음부터 모델을 정의하고 마이그레이션 파일을 생성해보세요.

  3. 수정된 모델 적용:
    모든 모델이 최신 상태로 저장되어 있는지 확인하고, alembic upgrade head를 사용하여 데이터베이스에 반영하세요.

위의 방법들을 하나씩 시도하며 문제를 해결해보시기 바랍니다. 추가적으로, Q&A 게시판의 비슷한 에러 질문에서 유사한 사례를 참고할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

moljin님의 프로필 이미지
moljin

작성한 질문수

질문하기