带有一对多关系的Flask-Migration

时间:2018-02-18 08:13:07

标签: python flask flask-sqlalchemy flask-migrate sqlalchemy-migrate

我有一个有效的博客系统。我想将它添加到评论系统。我使用id,title和body的post模型完成了迁移。

现在我添加注释并创建名为Comment的新模型。当我运行迁移时:

INFO [alembic.runtime.migration]上下文impl MySQLImpl。

INFO [alembic.runtime.migration]将采用非事务性DDL。

INFO [alembic.env]未检测到架构的任何更改。

from run import db

class Post(db.Model):
    __tablename__ = 'blog.post'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String, nullable=False)
    body = db.Column(db.Text, nullable=False)

    comments = db.relationship('Comment', backref='blog.post')


from run import db


class Comment(db.Model):   
    __tablename__ = 'blog.comment'
    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text, nullable=False)

    post_id = db.Column(db.Integer, db.ForeignKey('blog.post.id'), nullable=False)

我不知道我的代码有什么问题。我从文档中获得关系并进行编辑。 db之前没有任何评论表。

编辑1: 我在运行中调用注释如下:     来自model.comment导入评论

之后我可以创建迁移但迁移得到如下错误:

sqlalchemy.exc.InternalError:(pymysql.err.InternalError)(1005,'无法创建表blog_dbblog.comment(错误号:150&#34 ;外键约束形成错误")')[SQL:' \ nCREATE TABLE blog.comment(\ n \ tid INTEGER NOT NULL AUTO_INCREMENT,\ n \ tname VARCHAR(255)NOT NULL,\ n \ t体TEXT NOT NULL,\ n \ t创建DATETIME DEFAULT now(),\ n \ tstatus INTEGER NOT NULL,\ n \ tpost_id INTEGER NOT NULL,\ n \ tPRIMARY KEY(id),\ n \ tFOREIGN KEY (post_id)参考blog.post(id)\ n)\ n \ n'](关于此错误的背景:http://sqlalche.me/e/2j85

1 个答案:

答案 0 :(得分:1)

发生错误Foreign key constraint is incorrectly formed,因为主键和外键具有不同的类型。

Post模型中,您将id列定义为:

id = db.Column(db.Integer, primary_key=True)

但是您在post_id模型中添加的Comment外键的定义不同:

post_id = db.Column(db.Integer, db.ForeignKey('blog.post.id'), nullable=False)

我认为如果从外键中删除nullable子句,您将接受迁移。