sqlalchemy 的 session.rollback() 无效

【 使用环境 】测试环境
【 OB or 其他组件 】ob
【 使用版本 】V4.0.0
【问题描述】使用 sqlalchemy 操作 数据库, session.rollback() 无效
【复现路径】
#!/usr/bin/python3
from sqlalchemy import create_engine, VARCHAR
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from datetime import datetime
from sqlalchemy import BOOLEAN, DATETIME, INTEGER, Column, text

username = ‘root’
password = ‘mysql’
host = ‘xxx’
port = ‘2881’
database = ‘xxx’

connection_string = f’mysql+pymysql://{username}:{password}@{host}:{port}/{database}’
engine = create_engine(connection_string)
Session = sessionmaker(bind=engine)
Base = declarative_base()

class GroupEntity(Base):
abstract = True
tablename = “t_group”

group_name = Column(VARCHAR(255), nullable=False)
group_type = Column(INTEGER, nullable=True, default=1)

session = Session()

try:
session.begin(subtransactions=True)
entity = GroupEntity(**{“group_name”: “12345”, “group_type”: 1})
session.add(entity)
session.flush()
a = 1/0
session.commit()

except Exception as e:
session.rollback()
raise e

session.close()

【附件及日志】

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

username = ‘root’ 这里定义应该有问题,应该是 用户名@租户名,并且是非sys租户,
你这里commit正常吗?

可以看下数据库中的SQL执行历史,看看是否收到了rollback命令。

commit正常

无效具体提示日志是什么?

没有报错,直接正常走下去了

ob有地方看这日志?我看要开启global——log,但是开启不生效

session.flush() mysql能支持这操作并在 session.rollback() 撤销操作,但是 ob看着不支持

已经确认了: oceanbase 不支持 sqlalchemy.flush操作
mysql: 按照如下执行之后能拿到 entity.id, oceanbase 不能, 个人怀疑是,ob把flush和commit的逻辑合二为一了。或者缺少这样的操作支持。 也就是使用 sqlalchemy的项目都没法用了
try:
session.begin(subtransactions=True)
entity = AssetGroupEntity(**{“group_name”: “1234567”, “group_type”: 1})
session.add(entity)
session.flush()
print(entity.id)
a = 1/0
session.commit()
except Exception as e:
session.rollback()