在具有一对多关系的两个表之间使用db.create_all()创建表时出错

时间:2020-03-21 12:03:57

标签: python flask-sqlalchemy

我有2个表,它们之间创建了一对多关系,但是在导入db对象并使用db.create_all()时,出现以下错误

sqlalchemy.exc.NoReferencedTableError:与之相关的外键 列“ addresses.user_id”找不到要使用的表“用户” 生成一个外键来定位列“ id”

完整代码如下

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///relationships.db'
db = SQLAlchemy(app)


class Address(db.Model):
    __tablename__ = 'addresses'

    id = db.Column(db.Integer, primary_key=True)
    email_address = db.Column(db.String, nullable=False)

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    user = db.relationship("User", back_populates="addresses")

    def __repr__(self):
        return "<Address(email_address='%s')>" % self.email_address

class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    fullname = db.Column(db.String(50))
    nickname = db.Column(db.String(50))

    addresses = db.relationship("Address", back_populates="user")

    def __repr__(self):
        return "<User(name='%s', fullname='%s', nickname='%s')>" % (
                                self.name, self.fullname, self.nickname)

如果您可以指出错误,那将是很大的帮助。感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:0)

我只是注释掉了两个类中的表名,它开始起作用。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///relationships.db'
db = SQLAlchemy(app)


class Address(db.Model):
    # __tablename__ = 'addresses'

    id = db.Column(db.Integer, primary_key=True)
    email_address = db.Column(db.String, nullable=False)

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    user = db.relationship("User", back_populates="addresses")

    def __repr__(self):
        return "<Address(email_address='%s')>" % self.email_address

class User(db.Model):
    # __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    fullname = db.Column(db.String(50))
    nickname = db.Column(db.String(50))

    addresses = db.relationship("Address", back_populates="user")

    def __repr__(self):
        return "<User(name='%s', fullname='%s', nickname='%s')>" % (
                                self.name, self.fullname, self.nickname)