transactions - 如何在使用数据库 session 的同时使用sql alchemy中的事务?

标签 transactions sqlalchemy

我在我的项目中使用sql alchemy,我使用db session,

engine = create_engine(configuration)
db_session = scoped_session(sessionmaker(autocommit=False,
                                     autoflush=False,
                                     bind=engine))

Base = declarative_base()
Base.query = db_session.query_property()

def init_db():    
    import models
    Base.metadata.create_all(bind=engine)

数据库 session 用作:

db_session.merge(order)      #order(model) in object
db_session.commit()

现在我想将数据插入到订单和订单行项目两个表中,所以我需要事务, 作为: 1. 在第一次插入中,我希望插入订单的 id 在第二次插入查询中使用 2.如果第二个插入查询失败,则应回滚第一个查询

Try:
    #begin transaction/How to begin transaction?
    order=db_session.add(order)      #insert into order
    #is need to commit db_session here as I need inserted orders id
    #here actually db_session.commit() needed to get order's id(auto generated) 
    #if db_session committed here then sql alchemy starts new session       

    order_line_item.id = order.id
    db_session.add(order_line_item)    #insert into order line line item

    db_session.commit()
    #check transaction status if failed then rollback, How to check status?

except:
    db_session.rollback()

如何使用交易?

最佳答案

Lafada 建议的嵌套事务不适用于这种情况。 flush() 就可以了,例如

db_session.begin()
try:
    db_session.add(order)

    db_session.flush()

    order_line_item.id = order.id
    db_session.add(order_line_item)

    db_session.commit()
except:
    db_session.rollback()

或者更好的是,如果您在订单和订单项之间正确设置了关系,您甚至不必费心手动分配 ID。

关于transactions - 如何在使用数据库 session 的同时使用sql alchemy中的事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063328/

相关文章:

sql-server - 客户端与服务器端数据库事务

hibernate - 如何将spring与hibernate session 和事务管理集成?

python - sqlalchemy 中关于另一个应用程序创建的新行的通知

python - 带有 SQLAlchemy 的 Postgres 中的枚举数组

python - Redis:如何确保购物案例的并发性和原子性?

java - Oracle 数据库中的 READ_COMMITTED 和 SERIALIZABLE 隔离级别有什么区别?

sql - 奇怪的 SQL2005 问题。 "SqlConnection does not support parallel transactions"

python - 使用 SQLAlchemy 将值列表传递给 Oracle 函数

python - 在 mac os 上通过 pyodbc 从 sqlalchemy 连接到 mssql

unit-testing - 如何从 Fast API 中的单元测试访问数据库?