Python SQLAlchemy事务未持久化
我最近不得不在我的应用程序上实现一个事务,如下所示: 我有一个:Python SQLAlchemy事务未持久化,python,sqlalchemy,fastapi,Python,Sqlalchemy,Fastapi,我最近不得不在我的应用程序上实现一个事务,如下所示: 我有一个: “项目”表 “tags”表,其中“items.id”作为外键 “descriptions”表,其中“items.id”作为外键 我现在想执行此事务,如果失败则回滚: 在“项目”中插入项目 刷新并获取item.id(主键) 将标签插入“标签”(使用item.id),这是标签列表 将说明插入“说明”(使用item.id),这是说明列表 我的数据库是sqlite 我的代码: db_item = models.Items(titl
- “项目”表
- “tags”表,其中“items.id”作为外键
- “descriptions”表,其中“items.id”作为外键
- 在“项目”中插入项目
- 刷新并获取item.id(主键)
- 将标签插入“标签”(使用item.id),这是标签列表
- 将说明插入“说明”(使用item.id),这是说明列表
db_item = models.Items(title=item.title, description=item.description,
quantity=item.quantity, images=item.images,
category_name=item.category_name, status=item.status,
organization_id=item.organization_id, price=item.price)
db.begin(subtransactions=True)
db.add(db_item)
db.flush()
db_tags_to_items = [models.ItemsAndTags(tag_name=tag, item_id=db_item.id) for tag in item.tags]
db_short_descriptions = [models.ItemsShortDescription(line=line, item_id=db_item.id) for line in item.descriptions]
db.add_all(db_tags_to_items)
db.add_all(db_short_descriptions)
db.commit()
如果我返回db_item,它将返回它的id,但是如果我检查db,则该项没有被持久化,也没有标记或描述。当我没有犯错时,我做错了什么
如果需要更多的代码,请告诉我,我使用FastAPI框架和SQLAlchemy。我自己设法让它工作。 事实证明,实际上并不需要db.begin(subtransactions=True) 这是我现在的crud func,它满足我的需要:
# create item as transaction
def create_item_v2(db: Session, item: items_schemas.ItemCreateV2):
db_item = models.Items(title=item.title, description=item.description,
quantity=item.quantity, images=item.images,
category_name=item.category_name, status=item.status,
organization_id=item.organization_id, price=item.price)
try:
db.add(db_item)
db.flush()
db_tags_to_items = [models.ItemsAndTags(tag_name=tag, item_id=db_item.id) for tag in item.tags]
db_short_descriptions = [models.ItemsShortDescription(line=line, item_id=db_item.id) for line in item.descriptions]
db.add_all(db_tags_to_items)
db.add_all(db_short_descriptions)
db.commit()
db.refresh(db_item)
return db_item
except:
db.rollback()