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')) 在一个地方处理提交/回滚逻辑,并依赖于功能范围来确定工作单??元的范围,可以降低应用程序的复杂性并消除您尚未发现的错误. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |