5

SQLAlchemy で Flask-SqlAlchemy 拡張機能を使用して、Python で SQLite データベースを操作しています。

「Format」モデルと「Movie」モデルの間に多対多の関係が設定されています。関係を正常に設定し、クエリを問題なく実行しました。ムービーのフォーマットを更新しようとすると、問題が発生します。update メソッドを呼び出すと、AssertionError: A conflicting state is already present in the identity map for key (<class 'moviecode.models.Format'>, (1,))

このエラーは、SQLAlchemy セッションが update 呼び出し/db クエリ間で適切に削除/クリーンアップされていないと思わせますが、remove() 呼び出しを追加しても役に立ちません。

mainapp.py

app = Flask('moviecode')
db = SQLAlchemy(app)

ビュー.py

from updater import updateMovie

@app.route("/admin/movies/<int:movieId>/refresh/",methods=['GET'])
@login_required
def refreshMovie(movieId):
     updateMovie(movieId)
     return redirect(url_for('admin'))

updater.py

from mainapp import db
from models import Format, Movie

def updateMovie(movieId):
    movie = Movie.query.filter_by(id=movieId).first()
    formats = Format.query.all()
    movie.formats = newFormats #ERROR IS THROWN HERE
    db.session.commit()
    db.session.remove() #Trying to clean up Session. Makes no difference.

どんな助けや洞察も大歓迎です!私は多くの SqlAlchemy メソッドを試しましたが、うまくいきませんでした (プラットフォームの消去、ムービー オブジェクトのマージ、セッションの削除など)。また、ムービー形式を空白に設定し、変更をデータベースにコミットしてから新しい形式を追加しようとしましたが、変更はありませんでした。

4

1 に答える 1