Mysql SqlAlchemy错误:外键找不到表
因此,我正在构建一个应用程序,并尝试将新更改保存到数据库中,但当我尝试使用Mysql SqlAlchemy错误:外键找不到表,mysql,flask,sqlalchemy,foreign-keys,flask-sqlalchemy,Mysql,Flask,Sqlalchemy,Foreign Keys,Flask Sqlalchemy,因此,我正在构建一个应用程序,并尝试将新更改保存到数据库中,但当我尝试使用db.session.commit()在烧瓶中提交更改时,它会返回以下错误: sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'products.country_id' could not find table 'countries' with which to generate a foreign key to targe
db.session.commit()
在烧瓶中提交更改时,它会返回以下错误:
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'products.country_id' could not find table 'countries' with which to generate a foreign key to target column 'id'
在my models.py中,我有以下内容:
from app import db
from . import db
from datetime import datetime
def now():
return datetime.now()
class Countries(db.Model):
__tablename__ = 'countries'
__table_args__ = {'schema': 'products_data'}
id = db.Column(db.Integer, primary_key=True, unique=True, autoincrement=True)
name = db.Column(db.String(255))
code = db.Column(db.String(45))
def __repr__(self):
return f'Id {self.id}'
class Categories(db.Model):
__tablename__ = 'categories'
__table_args__ = {'schema': 'products_data'}
id = db.Column(db.Integer, primary_key=True, unique=True, autoincrement=True)
name = db.Column(db.String(255))
def __repr__(self):
return f'Id {self.id}'
class Brands(db.Model):
__tablename__ = 'brands'
__table_args__ = {'schema': 'products_data'}
id = db.Column(db.Integer, primary_key=True, unique=True, autoincrement=True)
name = db.Column(db.String(255))
logo = db.Column(db.String(5000))
feed = db.Column(db.String(5000))
feed_type = db.Column(db.String(45))
category_id = db.Column(db.Integer, db.ForeignKey('categories.id'))
country_id = db.Column(db.Integer, db.ForeignKey('countries.id'))
awinmid = db.Column(db.Integer)
def __repr__(self):
return f'Id {self.id}'
class Products(db.Model):
__tablename__ = 'products'
__table_args__ = {'schema': 'products_data'}
id = db.Column(db.Integer, primary_key=True, unique=True, autoincrement=True)
name = db.Column(db.String(255))
url = db.Column(db.Text)
category_id = db.Column(db.Integer, db.ForeignKey('categories.id'))
country_id = db.Column(db.Integer, db.ForeignKey('countries.id'))
price = db.Column(db.Float)
currency = db.Column(db.String(45))
discount_price = db.Column(db.Float)
shipping = db.Column(db.Float)
brand_id = db.Column(db.Integer, db.ForeignKey('brands.id'))
将产品中的列与外键关联时,我是否做错了什么?这是我第一次遇到这个错误,所以我现在真的不知道该怎么办。首先,我没有看到任何表
类别。其次,将您的模式从产品
表复制粘贴到国家
表中
PS:默认情况下,sqlalchemy为表提供类的名称(小写)。所以你的\uuuu tablename\uuuu='products'
实际上什么都不做
编辑:
代码的问题在于如何设置\uu table\u args\uu
属性。您为它指定了一个对象,但根据它们的规范,这是错误的
看看下面的示例,并相应地修改代码
__table_args__ = ({'schema': 'products_data'})
另外,为了进一步的参考,请看一下这个为了修复问题,我刚刚将模式添加到了db.ForeignKey
中,它成功了
例如:
db.ForeignKey('products_data.countries.id')
附言:
不是我的主意。只是想发布答案,以防稍后有人带着同样的问题访问帖子
戈德·汤普森谢谢你的帮助在DB上有它,但在型号中没有,但仍然是相同的错误。删除类别
表的外键并运行它。看看它是否有效,如果有效,那么您的问题与该表有关当您创建国家
表时,您是否使用flask db migrate-m'sth'
或db.create_all()将其“提交”到您的数据库中
命令?您的脚本中可能有该模型,但在.db文件中没有。我删除了它,并且很明显它对每个外键都给出了错误。您是否尝试过db.ForeignKey('products\u data.countries.id')
?效果良好。谢谢如果你想写一个答案,我可以接受