2016-08-08 7 views
0

私はAuthorCommentsと彼のコメントへの返答との関係を作りたいと思っています。ここでSQLAlchemyの2つのテーブルの関係

models.pyです:

class AuthorComments(Base): 

    id = db.Column(db.Integer, primary_key=True) 
    author_id = db.Column(db.Integer, db.ForeignKey('author.id')) 
    name = db.Column(db.String(50)) 
    email = db.Column(db.String(50), unique=True) 
    comment = db.Column(db.Text) 
    live = db.Column(db.Boolean) 

    comments = db.relationship('Reply', backref='reply', lazy='joined') 

    def __init__(self,author, name, email, comment, live=True): 

     self.author_id = author.id 
     self.name = name 
     self.email = email 
     self.comment = comment 
     self.live = live 

class Reply(Base): 

    id = db.Column(db.Integer, primary_key=True) 
    reply_id = db.Column(db.Integer, db.ForeignKey('author.id')) 
    name = db.Column(db.String(50)) 
    email = db.Column(db.String(50), unique=True) 
    comment = db.Column(db.Text) 
    live = db.Column(db.Boolean) 

    def __init__(self,author, name, email, comment, live=True): 

     self.reply_id = author.id 
     self.name = name 
     self.email = email 
     self.comment = comment 
     self.live = live 

なぜ私はこのエラーを取得しています: sqlalchemy.exc.InvalidRequestError

InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Original exception was: Could not determine join condition between parent/child tables on relationship AuthorComments.comments - there are no foreign keys linking these tables. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.

+0

お問い合わせください! – Reznov

+0

あなたの質問には、おそらくこのエラーを引き起こす必要のないコードがたくさんあります。あなたはまだあなたのエラーがある小さな例を作成しようとすることはできますか? – FlyingFoX

+0

質問が更新されました! – Reznov

答えて

2

あなたの悩みはそのSQLAlchemyのdoesnのです子テーブルのある行(Reply)に対して、親テーブルのどの行(AuthorComments)を選択してください! の外部キーの列は、の列を参照するReplyに定義する必要があります。

Hereは、SQLAlchemyで1対多の関係を定義するためのドキュメントです。このような

何か:

class AuthorComments(Base): 
    __tablename__ = 'author_comment' 
    ... 

class Reply(Base): 
    ... 
    author_comment_id = db.Column(db.Integer, db.ForeignKey('author_comment.id')) 
    ... 
    author_comment = db.relationship(
     'AuthorComments', 
     backref='replies', 
     lazy='joined' 
     ) 

はそのような平等が存在しない場合author_commentようsome_reply.author_comment_id == some_author_comment.id、またはNoneとの関係を取得し、各replyになります。

backrefは、それぞれauthor_commentが上記の条件を満たす回答のコレクションとの関係を持つことを可能にします。replies

+0

上記のコードを試しましたが、実際にはデータベース内以外のエラーは表示されません。すべてのauthor_comment_idにNULL値があります。 – Reznov

+0

私は問題を解決しましたが、同じ、すべてのコメントの返事を得ています! – Reznov

+0

@Reznov外部キー列を追加するときにSQLAlchemyよりもデータベース*を実際に更新していることを確認してください。単に 'models.py'を変更してもデータベースに列は追加されません。あなたがデータを失うことに気をつけなければ、Flask-SQLAlchemyの 'drop_all'と' create_all'コマンドを使って素早くデータベースを再構築することができます(http://flask-sqlalchemy.pocoo.org/2.1/バインド/#作成およびドロップテーブル)。それ以外の場合は、[Alembic](// alembic.zzzcomputing.com)のような移行ツールを調べることをお勧めします。 [Flask-Migration](// flask-migrate.readthedocs.io) –

関連する問題