【问题标题】:Flask-SQLAlchemy relationship error (relation "table_name" does not exist)Flask-SQLAlchemy 关系错误(关系“table_name”不存在)
【发布时间】:2020-04-15 01:10:09
【问题描述】:

我正在尝试在 User_Info 表和其余表之间创建一个外键(一对多关系),但它给了我这个错误:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedTable) 关系“user_info”不存在 LINE 1: INSERT INTO user_info (用户名、名字、姓氏、性别... ^

[SQL: INSERT INTO user_info (username, first_name, last_name, gender, date_of_birth, profile_img_url) 值 (%(username)s, %(first_name)s, %(last_name)s, %(gender)s, %(date_of_birth)s, %(profile_img_url)s) 返回 user_info.id] [参数:{'用户名':'gohammedhl', 'first_name':'Ameer','last_name':'Farqad','gender':'1', 'date_of_birth':'2019-09-25','profile_img_url':'bla bla'}] (此错误的背景:http://sqlalche.me/e/f405

这是我的桌子:

class User_Info(UserMixin, db.Model):
    __tablename__ = "user_info"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), nullable=False, unique=True)
    first_name = db.Column(db.String(30), nullable=False)
    last_name = db.Column(db.String(30), nullable=False)
    gender = db.Column(db.String(2), nullable=False)
    date_of_birth = db.Column(db.DATE, nullable=False)
    profile_img_url = db.Column(db.String, nullable=True)
    post = db.relationship("Posts", backref="post_author", lazy=True)
    comment = db.relationship("Comments", backref="comment_author", lazy=True)
    phone_number = db.relationship("User_Auth", backref="ph_no_owner", lazy=True)

class User_Auth(UserMixin, db.Model):    
    __tablename__ = "user_auth"
    id = db.Column(db.Integer, primary_key=True)
    phone_no = db.Column(db.String(100), nullable=False, unique=True)
    password_hash = db.Column(db.String(300), nullable=False)
    ph_no_owner_id = db.Column(db.Integer, db.ForeignKey("user_info.id"))

class Posts(db.Model):
    __tablename__ = "posts"
    id =  db.Column(db.Integer, primary_key=True)
    body = db.Column(db.String(150), nullable=False)
    img_url = db.Column(db.String(400), nullable=True)
    post_date = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
    post_author_id = db.Column(db.Integer, db.ForeignKey("user_info.id"))


class Comments(db.Model):
    __tablename__ = "comments"
    id =  db.Column(db.Integer, primary_key=True)
    comment = db.Column(db.String(150), nullable=False)
    comment_date = db.Column(db.DateTime, default=datetime.utcnow)
    comment_author_id = db.Column(db.Integer, db.ForeignKey("user_info.id"))    

有什么想法吗? 提前致谢!

【问题讨论】:

  • 您在创建模型后是否进行了数据库迁移?
  • 其实没有,我只是初始化了一下
  • 假设您使用Flask-Migrate,您需要在使用flask db migrate 初始化后创建迁移,这将创建迁移文件。然后您需要使用flask db upgrade 运行这些迁移文件
  • 实际上我只是使用 python 解释器重新创建了它,它就像一个魅力!但是我还是不明白为什么它还不能在代码编辑器上工作!

标签: python postgresql flask foreign-keys flask-sqlalchemy


【解决方案1】:

我解决了!

缺少:

app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = ("postgresql://postgres:PasswordHere@localhost/dbName")
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)

还有:

with app.app_context():
    db.create_all()

虽然此代码位于为创建内容而创建的单独文件中,但在我将其放入上述表格的同一文件之前它无法正常工作!

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 2012-01-13
    • 2020-09-03
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    相关资源
    最近更新 更多