from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# 创建数据库引擎
engine = create_engine('mysql+pymysql://username:password@host:port/database_name')
# 创建会话工厂
Session = sessionmaker(bind=engine)
# 创建基类
Base = declarative_base()
# 定义用户表模型
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
email = Column(String(100))
# 创建表(如果不存在)
Base.metadata.create_all(engine)
# 获取会话
session = Session()
try:
# 插入一条用户数据
new_user = User(name='John', email='john@example.com')
session.add(new_user)
# 更新该用户的某个字段
new_user.name = 'Jane'
# 提交事务
session.commit()
print("两个操作都成功")
except Exception as e:
# 发生异常,回滚事务
session.rollback()
print(f"操作失败,原因: {e}")
finally:
# 关闭会话
session.close()
关键步骤作用:
- 创建数据库引擎:
create_engine
创建了与MySQL数据库的连接,指定了数据库的类型、用户名、密码、主机、端口和数据库名。
- 创建会话工厂和基类:
sessionmaker
创建了一个会话工厂,用于生成数据库会话。declarative_base
创建了一个基类,用于定义数据库表模型。
- 定义用户表模型:通过继承
Base
类,定义了User
表的结构,包括id
、name
和email
字段。
- 创建表:
Base.metadata.create_all(engine)
根据定义的模型创建数据库表(如果不存在)。
- 获取会话:
Session()
从会话工厂获取一个会话,用于执行数据库操作。
- 事务处理:
- 操作执行:在
try
块中执行插入和更新操作,这些操作在同一个事务中。
- 提交事务:
session.commit()
将事务中的所有操作持久化到数据库。只有当此语句执行成功,所有操作才会生效。
- 异常处理:如果在
try
块中发生异常,except
块捕获异常并执行session.rollback()
,撤销事务中的所有操作,确保数据的一致性。
- 关闭会话:无论事务是否成功,
finally
块中的session.close()
关闭会话,释放资源。