当前位置: 首页 > 知识库问答 >
问题:

SqlAlchemy错误:外键找不到表

公良征
2023-03-14

因此,我正在构建一个应用程序,并尝试将新的更改保存到数据库中,但当我尝试使用db.session.commit()提交flask中的更改时,它将返回以下错误:

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'

在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'))

当将产品中的列与外键关联时,我是否做错了什么? 这是我第一次遇到这个错误,所以我现在真的不知道该怎么做了。

共有1个答案

司空胤
2023-03-14

首先,我没有看到任何categories表。 其次,将粘贴的模式从products表复制到country表中。

ps:默认情况下,sqlalchemy为表提供类的名称(大小写)。 所以您的__tablename__='products'实际上什么也不做。

编辑:

代码的问题在于如何设置__table_args__属性。 你给它分配了一个对象,根据他们的规范,这是错误的。

请看下面的示例,并相应地修改您的代码

__table_args__ = ({'schema': 'products_data'})

为了进一步参考,请查看https://docs.sqlalchemy.org/en/13/orm/extensions/declarative/table_config.html

 类似资料:
  • 当我试图运行angular2-express应用程序“NPM运行开发”时,我得到了“找不到名称‘promise’错误” 以下是几个文件的内容 package.json json

  • 我更新了我的尝试,将一些内容保留为CHAR,但仍然得到一个类似的错误:第1行错误:ORA-02091:事务回滚ORA-02291:违反完整性约束(MMM1339.ITEMNO_PHAR_FK)-未找到父密钥 需求的外键都在不同的供应主键中有值,所以我不确定为什么仍然存在问题。

  • 问题内容: 我尝试从Java bin目录执行keytool,但收到警告bash提示错误:keytool:命令未找到。 问题答案: 这些是解决我的问题的步骤: 搜索我的Java的安装路径 移至Java目录(我的服务器上安装了jre的目录) 使用keytool命令创建SSL证书

  • 我有一个烧瓶应用程序,与MySQL使用sqlalChemy连接。DB查询时发生奇怪的错误。 `回溯(最近一次调用):文件“/home/Desktop/work/nesting app/env/lib/python3.8/site packages/sqlalchemy/util/_collections.py”,第1008行,调用返回self。注册表[key]键错误: 在处理上述异常期间,发生了另

  • 问题内容: 我将RDD [myClass]转换为数据框,然后将其注册为SQL表 该表是可调用的,可以用以下命令演示 但是下一步给出了错误,说表未找到:my_rdd Spark的新手。 不明白为什么会这样。有人可以帮我吗? 问题答案: 确保从相同的SQLContext导入hidden._。临时表在一个特定的SQLContext中保留在内存中。

  • 我将RDD[myClass]转换为dataframe,然后将其注册为SQL表 此表是可调用的,可以使用以下命令演示 对Spark来说是个新手。不明白为什么会这样。有谁能帮我摆脱这一切吗?

  • 我不能安装任何需要的包。错误消息如下所示 我还尝试了包,得到了完全相同的结果。 路径: Make:GNU Make 3.81安装在中(来自官方的Debian包) 分册:Debian 6.0.8 ARCH:AMD64 构建-基本包:已安装 节点:从源手工构建 安装非GYP软件包:正常工作

  • 问题内容: 我有一个用户表和一个朋友表。朋友表拥有两个外键,分别指向我的用户表和状态字段。我试图能够从Friend对象上的User表中调用属性。例如,我希望能够执行诸如friend.name或friend.email之类的操作。 当我得到对象时,我所拥有的只是2,并且我想显示每个用户的所有属性,以便可以在表单等中使用该信息。我对sqlalchemy还是陌生的- 仍在尝试学习更高级的功能。这只是一个