1

高校サッカーのスコアを投稿する Web サイトからデータを取得し、それを Flask プロジェクトに入れています。私は Flask-SQLAlchemy を使用しており、ゲームが既に存在するかどうかを確認しようとしています。そうでない場合は、データベースに新しいゲームを作成します。存在する場合は、スコアを更新したいだけです(最後のインポート以降にスコアに修正があった場合に備えて)。私のコードは次のとおりです。

"""
Save to Games Table
"""
game = Games.query.filter_by(game_date=g_date, team1_name=t1_name, team1_score=t1_score,   team2_name=t2_name, team2_score=t2_score).first()

"""
Need to set it to update scores if game already exists
"""
if not game:
    add_game = Games(year_id=None, team1_id=None, team1_name=t1_name, team1_score=t1_score, team2_id=None, team2_name=t2_name, team2_score=t2_score, game_date=g_date)  
    db.session.add(add_game)
else:
    game.team1_score = t1_score
    game.team2_score = t2_score
    db.session.add(game)

db.session.commit()

コードを実行すると、次のエラーが表示されます。

sqlalchemy.exc.InvalidRequestError: オブジェクト '' は既にセッション '1' にアタッチされています (これは '2' です)

これを行う正しい方法は何ですか?

4

1 に答える 1

4

クエリから取得したオブジェクトの場合、セッションにオブジェクトを追加する必要はありません。

game = Games.query.filter_by(...).first()

if not game:
    add_game = Games(...)  
    db.session.add(add_game)
else:
    game.team1_score = t1_score
    game.team2_score = t2_score

db.session.commit()
于 2012-10-10T15:04:20.360 に答える