Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SqlAlchemy错误:外键找不到表_Mysql_Flask_Sqlalchemy_Foreign Keys_Flask Sqlalchemy - Fatal编程技术网

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')
?效果良好。谢谢如果你想写一个答案,我可以接受