小编cla*_*amz的帖子

SQLAlchemy密钥的身份映射中已经存在冲突状态

我正在使用围绕SQLAlchemy的Flask-SqlAlchemy扩展来在Python中使用SQLite数据库。

我在“格式”和“电影”模型之间建立了多对多关系。我已经成功设置了关系并毫无疑问地执行了查询。当我尝试对电影的格式进行更新时,会出现问题。调用我的更新方法会导致AssertionError: A conflicting state is already present in the identity map for key (<class 'moviecode.models.Format'>, (1,))

此错误使我认为在更新调用/数据库查询之间无法正确删除/清理SQLAlchemy会话,但是添加remove()调用无济于事。

mainapp.py

app = Flask('moviecode')
db = SQLAlchemy(app)
Run Code Online (Sandbox Code Playgroud)

views.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'))
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

任何帮助或见识将不胜感激!我已经尝试了很多SqlAlchemy方法,但是都没有运气(删除平台,合并电影对象,删除会话等)。还尝试将影片格式设置为空白并将更改提交给数据库,然后再添加回新格式,但没有更改。

python sqlalchemy flask flask-sqlalchemy

5
推荐指数
1
解决办法
2931
查看次数

标签 统计

flask ×1

flask-sqlalchemy ×1

python ×1

sqlalchemy ×1