gpt4 book ai didi

python - SQLAlchemy key 的身份映射中已存在冲突状态

转载 作者:太空狗 更新时间:2023-10-30 01:34:39 27 4
gpt4 key购买 nike

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

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

这个错误让我认为 SQLAlchemy session 在更新调用/数据库查询之间没有被正确删除/清理,但是添加 remove() 调用没有帮助。

ma​​inapp.py

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

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'))

更新程序.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 方法但没有成功(删除平台、合并电影对象、删除 session 等)。还尝试将电影格式设置为空白并在添加回新格式之前将更改提交给数据库,但没有任何更改。

最佳答案

您需要将结果中的每个项目附加到 movie.formats 关系。

for format in formats:
movie.formats.append(format)

关于python - SQLAlchemy key 的身份映射中已存在冲突状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16227559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com