python – 在循环中使用SQLAlchemy Session对象提交数据时出现问题

python – 在循环中使用SQLAlchemy Session对象提交数据时出现问题,第1张

概述我有一个数据库提交SQLalchemy的问题.这是我的场景我有一个要添加到表中的记录列表.将记录添加到表中后,我需要获取插入的记录Id并在第二个表中执行另一个插入.我在单个会话下进行这些 *** 作.代码结构如下所示,因为我不允许给出代码 创建会话对象 循环要插入的记录列表: do the session.add(obj) session.commit() get obj.id do the 我有一个数据库提交sqlalchemy的问题.这是我的场景我有一个要添加到表中的记录列表.将记录添加到表中后,我需要获取插入的记录ID并在第二个表中执行另一个插入.我在单个会话下进行这些 *** 作.代码结构如下所示,因为我不允许给出代码

创建会话对象

循环要插入的记录列表:

do the session.add(obj) session.commit() get obj.ID do the session.add(obj2) # with obj2 having the ID from the obj session.commit()

如果我们有多条记录,那么只有最后一条记录数据才能正确提交

任何人都可以帮我纠正这个问题.

解决方法 您可以尝试重构代码以使用此代码:

Session = sqlalchemy.orm.sessionmaker(...)def transaction(self,callback):  session = sqlalchemy.orm.scoped_session(Session)  try:    result = callback(session)  except:    session.rollback()    raise  else:    session.commit()  finally:    session.close()  return result

然后每个事务都有自己的功能,如下所示:

def updatetxn(pk,newvalue):  def txn(session):    obj = session.query(myclass).filter_by(ID=pk).one()    obj.fIEld = newvalue    session.add(obj)  return txntransaction(updatetxn(4,'abc'))

在一个地方处理提交/回滚逻辑,并依赖于功能范围来确定工作单​​元的范围,可以降低应用程序的复杂性并消除您尚未发现的错误.

总结

以上是内存溢出为你收集整理的python – 在循环中使用SQLAlchemy Session对象提交数据时出现问题全部内容,希望文章能够帮你解决python – 在循环中使用SQLAlchemy Session对象提交数据时出现问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194564.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存