【已解决】sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column (painting,).ori...

【已解决】sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column ‘(‘painting’,).origin_id’ could not find table ‘origin’ with which to generate a foreign key to target column ‘id’

创建数据库的时候,在构建一对一,一对多,多对多时报错。下面用一对多举例。

原因一

在设置表名的那条语句后面加了 “,”

# 图片表
class Origin(db.Model):
    __tablename__ = 'origin',   #*这个地方多了逗号*
    id = db.Column(db.Integer, primary_key=True)  # 主键
    url = db.Column(db.String(64), nullable=False)  # nullable 能否为空
    paintings = db.relationship("Painting", backref="origin")  # 分级图片关联【调用:painting.origin.url


# 分级图片
class Painting(db.Model):
    __tablename__ = 'painting',
    id = db.Column(db.Integer, primary_key=True)  # 主键
    url = db.Column(db.String(64), nullable=False)  # nullable 能否为空
    origin_id = db.Column(db.Integer, db.ForeignKey("origin.id"))  # 所属原始图片【一对多中多的一方放外键

解决办法:删了","即可

原因二

表名与调用时表名不相符

# 图片表
class Origin(db.Model):
    __tablename__ = 'originaaa'   #*设置了表名*
    id = db.Column(db.Integer, primary_key=True)  # 主键
    url = db.Column(db.String(64), nullable=False)  # nullable 能否为空
    paintings = db.relationship("Painting", backref="origin")  # 分级图片关联【调用:painting.origin.url


# 分级图片
class Painting(db.Model):
    __tablename__ = 'painting',
    id = db.Column(db.Integer, primary_key=True)  # 主键
    url = db.Column(db.String(64), nullable=False)  # nullable 能否为空
    origin_id = db.Column(db.Integer, db.ForeignKey("origin.id"))  # 所属原始图片【一对多中多的一方放外键
    #*这个地方调用的时候仍然调用了默认表名*

解决办法:

  1. 删除设置的表名,调用默认表名即可
  2. 调用的时候,调用设置的表名

默认表名

默认表名是小写字母,驼峰法命名的表名会有下划线分割。

class User(db.Model) 中,默认表名是user
class StudentUser(db.Moedl) 中,默认表名是student_user

你可能感兴趣的:(mysql,数据库)