Flask Rest API SQLAlchemy 外键错误

Flask Rest API SQLAlchemy foreign key error

当我尝试“flask db migrate”时出现 SQLALchemy 错误

NoReferencedTableError: Foreign key associated with column 'user.menu_id' could not find table 'menu' with which to generate a foreign key to target column 'id

菜单table

class Menu(db.Model):
   __tablename__ = 'menus'
   id = db.Column(db.Integer(), primary_key=True)
   name = db.Column(db.String(64), index=True, unique=True)
   price = db.Column(db.String(64), index=True, unique=True)
   description = db.Column(db.String(64), index=True, unique=True)
   picture = db.Column(db.String(64), index=True, unique=True)
   create_date = db.Column(db.DateTime, default=datetime.utcnow)
   users = db.relationship('User', backref="menu", lazy=True)

用户table

class User(Model):
""" User model for storing user related data """

   id = Column(db.Integer, primary_key=True)
   email = Column(db.String(64), unique=True, index=True)
   username = Column(db.String(15), unique=True, index=True)
   name = Column(db.String(64))
   password_hash = Column(db.String(128))
   admin = Column(db.Boolean, default=False)

   joined_date = Column(db.DateTime, default=datetime.utcnow)    
   userdataset = db.relationship("Dataset", backref="user", lazy="dynamic")
   menu_id = Column(db.Integer(), db.ForeignKey('menu.id'), nullable=False)
   def __init__(self, **kwargs):
      super(User, self).__init__(**kwargs)

我该如何解决这个问题?我哪里做错了?

您已将 'Menu' table 重命名为 'menus' 'Menu' 模型中的 __tablename__ 属性:

__tablename__ = 'menus'

然后您尝试引用 'Menu' table,而实际上,它的名称已更改为 'menus'。解决此问题的最简单方法是将 User.menu_id 列更改为:

menu_id = Column(db.Integer(), db.ForeignKey('menus.id'), nullable=False)

解决此问题的另一种方法是将 __tablename__ 属性 修改为 'menu'。 (您也可以删除它。)