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 メソッドを試しましたが、うまくいきませんでした (プラットフォームの消去、ムービー オブジェクトのマージ、セッションの削除など)。また、ムービー形式を空白に設定し、変更をデータベースにコミットしてから新しい形式を追加しようとしましたが、変更はありませんでした。