【发布时间】:2018-07-28 17:11:23
【问题描述】:
我有一个有效的博客系统。我想将它添加到评论系统。我使用带有 id、title 和 body 的 post 模型完成了迁移。
现在我添加 cmets 并创建名为 Comment 的新模型。当我运行迁移时:
INFO [alembic.runtime.migration] Context 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: 我在运行中调用评论,如下所示: from model.comment 导入评论
之后我可以创建迁移,但迁移出现如下错误:
sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1005, 'Can\'t create table blog_db.blog.comment (errno: 150 "外键约束格式不正确")') [SQL : '\nCREATE TABLE blog.comment (\n\tid INTEGER NOT NULL AUTO_INCREMENT, \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) REFERENCES blog.post (id)\n)\n\n'] (背景错误:http://sqlalche.me/e/2j85)
【问题讨论】:
-
该代码是否在 2 个单独的模块中?都是进口的吗?你是手动调用 db.create_all() 吗?
-
您应该在某处显式导入
Comment。 -
它们在同一个模块中。我不在任何地方调用 db.create_all() 。我编辑我的主题
标签: python flask flask-sqlalchemy flask-migrate sqlalchemy-migrate