python - 具有一对多关系的 Flask-Migration

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

我有一个可用的博客系统。我想将其添加到评论系统中。我使用带有 id、标题和正文的 post 模型完成了迁移。

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

信息 [alembic.runtime.migration] 上下文实现 MySQLImpl。

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

信息 [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 导入 Comment

之后我可以创建迁移,但迁移出现如下错误:

sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1005, '无法创建表blog_dbblog.comment (errno: 150 "外键约束格式不正确")') [SQL: '\nCREATE TABLE blog.comment (\n\tid INTEGER NOT NULL AUTO_INCRMENT,\n\tname VARCHAR(255) NOT NULL,\n\tbody TEXT NOT NULL、\n\tcreated 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 )

最佳答案

发生错误外键约束格式不正确是因为主键和外键的类型不同。

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

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

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

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

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

关于python - 具有一对多关系的 Flask-Migration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48849701/

相关文章:

python - 对于排序数组来说,更快地替代 np.where

python - 计算是否有 2 个条件 - Python

python - 将 pull_all 和 push_all 与 python/mongoengine 一起使用

python - 未注册的多页 Dash 应用回调

python - SQLAlchemy:为具有循环关系的模型类编写单元测试

python - 如果 Django 中已经存在某些表,如何强制迁移到数据库?

Google Compute Engine 上的 Flask - 无法从外部/浏览器访问

javascript - 在 jQuery.post 上,我收到消息 : The method GET is not allowed for the requested URL

sqlalchemy - 使用 Flask-SQLAlchemy 自动映射多个数据库

python - 使用来自 SQLAlchemy 对象的数据在 flask 中预填充 WTforms