我有一个有效的博客系统。我想将它添加到评论系统。我使用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_db
。blog.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)
答案 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
子句,您将接受迁移。