Flask-SqlAlchemy - 与列''关联的外键无法找到表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask-SqlAlchemy - 与列''关联的外键无法找到表相关的知识,希望对你有一定的参考价值。

我对Flask-SQLAlchemy有一个奇怪的问题。当我尝试通过Flask应用程序更新模型时,我收到以下错误,但是当通过终端执行时工作正常。我正在通过邮递员做一个put请求(http://localhost:5000/changecontrols/2)。记录在那里,就像我说终端的工作正常。

Error: 'Foreign key associated with column 'ChangeControls.client_id' could not find table 'Clients' with which to generate a foreign key to target column ‘id’

我的结构看起来像这样:

  • changemanger 楷模 切换控制 客户
  • app.朋友
  • Web API.朋友

我正在执行一个put请求,其中application / json类型为:{“name”:“Data Patch”}

app.朋友

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config.from_pyfile('config.py')

db = SQLAlchemy(app)

from webapi import *

if __name__ == '__main__':
    app.run()

Web API.朋友

from app import db
@app.route("/changecontrols/<string:id>", methods=["PUT"])
def update_change_control(id):
    data = request.get_json()
    change_control = ChangeControl.query.get(id)

    if change_control is None:
         return jsonify({"result": "change control was not found"}), 404

    change_control.name = data["name"]

   ---> **db.session.commit()  **<- This is where the error occurs****

    return jsonify(change_control.serialize()), 200

切换控制

from app import db

class ChangeControl(db.Model):
    __tablename__ = 'ChangeControls'
    id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True)
    number = db.Column(db.String(20), nullable=False)
    name = db.Column(db.String(200), nullable=False)
    type = db.Column(db.String(50), nullable=True)
    client_id = db.Column(db.Integer, db.ForeignKey('Clients.id'))

    def load_from_json(self, data):

        self.name = data.get("name",self.name)
        self.number = data.get("number",self.number)
        self.type = data.get("type", self.type)

客户

from app import db

class Client(db.Model):
    __tablename__ = 'Clients'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True )
    name = db.Column(db.String(100), nullable=False)
    startdate = db.Column(db.DateTime , default=datetime.datetime.utcnow())
    inactivedate = db.Column(db.Date, nullable=True)

    changecontrols = db.relationship('ChangeControl', backref='client', lazy='dynamic')

    def load_from_json(self, data):
        self.id = data["id"]
        self.name = data["name"]
        self.number = data["number"]

这个相同的代码在终端上工作没有错误?!?! enter image description here

谢谢你看我的帖子:)

答案

那是因为你没有在你的app.py中导入你的模型。尝试在app.py文件中包含以下内容:

from models.ChangeControl import ChangeControl
from models.Client import Client
from webapi import *

这样您就不需要将所有模型都放在一个包中。

以上是关于Flask-SqlAlchemy - 与列''关联的外键无法找到表的主要内容,如果未能解决你的问题,请参考以下文章

flask-sqlalchemy数据库自动更新

汇编输入行与列实现对二维数组的查询

python flask-sqlalchemy如何设置使自动建的mysql表字符集charset为utf8

在Hbase使用过滤器(行键过滤器列族与列过滤器值过滤器)

Flask 学习-84.Flask-SQLAlchemy 一对多关系级联删除

Flask 学习-84.Flask-SQLAlchemy 一对多关系级联删除