3. 回滚

回滚之前

mysql> select * from user;
+----+------+----------+
| id | name | password |
+----+------+----------+
|  1 | rain | 12345    |
+----+------+----------+
1 row in set (0.00 sec)

执行代码

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker

# 创建连接
engine = create_engine("mysql+pymysql://root:root@127.0.0.1/cmz", encoding='utf-8', echo=False)
Base = declarative_base()  # 生成ORM基类


# 创建表结构
class User(Base):
    __tablename__ = 'user'  # 表名
    id = Column(Integer, primary_key=True)
    name = Column(String(32))
    password = Column(String(64))


# 直接调用基类下的方法
Base.metadata.create_all(engine)

# 实例与socket绑定,创建与数据库的绘画session class,注意,这里返回
# 给session的是一个class,不是实例
Session_class = sessionmaker(bind=engine)
# 生成session实例,cursor
Session = Session_class()

# 创建用户
fake_user = User(name='leco', password="666666")
Session.add(fake_user)
# 回滚
Session.rollback()
Session.commit()
执行后结果
mysql> select * from user;
+----+------+----------+
| id | name | password |
+----+------+----------+
|  1 | rain | 12345    |
+----+------+----------+
1 row in set (0.00 sec)

删除Session.rollback() 执行后结果

mysql> select * from user;
+----+------+----------+
| id | name | password |
+----+------+----------+
|  1 | rain | 12345    |
|  2 | leco | 666666   |
+----+------+----------+
2 rows in set (0.00 sec)
注意: - 回滚就是mysql的一个事务的特性,要么全部执行,要么全部不执行 - 回滚通过通过捕获异常来实现回滚。