본문 바로가기

개발/Flask, Fastapi

Flask-sqlalchemy "One or more mappers failed to initialize" 오류

One or more mappers failed to initialize -  can't proceed with initialization of other mappers. Triggering mapper: 'mapped class User->user'. Original exception was: relationship 'tweets' expects a class or a mapper argument 

라는 오류가 떴다. 읽어보니 매핑 관계에서 문제가 있었다.

 

해결책

1. 테이블 간의 관계 relationship을 꼼꼼하게 봐준다.

처음에

class Tweet(db.Model):
    __tablename__ = 'tweet'
    id = db.Column(db.Integer(), primary_key=True)
    text = db.Column(db.Text())
    embedding = db.Column(db.PickleType)
    user_id = db.Column(db.Integer(),db.ForeignKey('user.id'))

class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer(), primary_key=True)
    username = db.Column(db.String(64), nullable=False) #unique=True,
    full_name = db.Column(db.String(64), nullable=False)
    followers = db.Column(db.Integer())
    tweets = db.relationship("Tweet", back_populates="users")

back_populates로 relationship을 지정하니 오류가 난 거 같아서 back_ref로 바꿨는데, 저 오류가 떠서
다시 back_populates로 바꾸니 오류가 없어졌다.

 

2. 작업하던 폴더의 migrations 폴더 삭제

 

3. CLI에서 

  • FLASK_APP=flask_app flask db init
  • FLASK_APP=flask_app flask db migrate
  • FLASK_APP=flask_app flask db upgrade

로 업그레이드 적용해주기

 

Can't locate revision identified by - 에러가 뜨긴 했지만

매핑이 잘 적용되었다. 

오류 코드가 없어졌다!