加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 12:18:55 所属栏目:Python 来源:网络整理
导读:我有一个数据库提交SQLalchemy的问题.这是我的场景我有一个要添加到表中的记录列表.将记录添加到表中后,我需要获取插入的记录Id并在第二个表中执行另一个插入.我在单个会话下进行这些操作.代码结构如下所示,因为我不允许给出代码 创建会话对象 循环要插入的
我有一个数据库提交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 txn

transaction(updatetxn(4,'abc'))

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读