1

私は作業ブログシステムを持っています。コメントシステムに追加したい。ID、タイトル、本文を含む投稿モデルで移行を完了しました。

ここで、コメントを追加して、Comment という名前の新しいモデルを作成します。移行を実行すると:

INFO [alembic.runtime.migration] コンテキスト impl 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: 以下のように run 内でコメントを呼び出します: from model.comment import Comment

その後、移行を作成できますが、移行は以下のようなエラーが発生しました:

sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1005、「テーブルを作成できませんblog_dbblog.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 )

4

1 に答える 1

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、移行が受け入れられると思います。

于 2018-02-19T06:49:48.327 に答える