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'。 (您也可以删除它。)
当我尝试“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'。 (您也可以删除它。)