Python SQLAlchemy: engine, connection 和 session 的区别
在本文中,我们将介绍 Python 中 SQLAlchemy 这个功能强大的 ORM(对象关系映射)工具,并深入研究 SQLAlchemy 中 engine(引擎)、connection(连接)和session(会话)这三个重要的概念及其区别。
阅读更多:Python 教程
SQLAlchemy 简介
SQLAlchemy 是一个用于 Python 的数据库工具和 ORM 框架,它提供了一种以 Python 对象的形式操作数据库的方式,使得开发者可以使用面向对象的方式进行数据库操作,而不需要编写原生的 SQL 语句。
engine(引擎)
在 SQLAlchemy 中,engine 是与数据库进行交互的主要接口。它负责管理数据库连接池、执行 SQL 语句等底层操作。通过创建 engine 对象,我们可以连接到不同的数据库,并执行 SQL 语句。
下面是一个使用 engine 连接到 SQLite 数据库的示例代码:
from sqlalchemy import create_engine
# 创建 SQLite 数据库引擎
engine = create_engine('sqlite:///mydatabase.db')
# 执行 SQL 语句
result = engine.execute('SELECT * FROM mytable')
在上面的例子中,我们使用 create_engine
方法创建了一个 SQLite 数据库引擎,连接到名为 “mydatabase.db” 的数据库文件。然后,我们使用 engine.execute
方法执行了一条 SQL 语句,获取了查询结果。
connection(连接)
connection 是 engine 对象的一个实例,它表示与数据库的一个会话连接。每次从 engine 中获取一个 connection 对象后,我们可以使用该连接执行多条 SQL 语句,在连接关闭之前,所有的操作都将在同一个数据库会话中进行。
下面是一个使用 connection 执行多个 SQL 语句的示例代码:
from sqlalchemy import create_engine
# 创建 SQLite 数据库引擎
engine = create_engine('sqlite:///mydatabase.db')
# 创建连接
connection = engine.connect()
# 执行第一个 SQL 语句
result1 = connection.execute('SELECT * FROM mytable')
# 执行第二个 SQL 语句
result2 = connection.execute('SELECT * FROM mytable2')
# 关闭连接
connection.close()
在上面的例子中,我们使用 engine.connect
方法创建了一个 connection 对象,并使用该连接对象执行了两条不同的 SQL 查询语句。最后,我们手动关闭了连接。
session(会话)
session 是 SQLAlchemy 中最高层的抽象,它代表了一个数据库会话。通过 session,我们可以完成大部分数据库操作,包括增、删、改、查、事务等。
下面是一个使用 session 进行数据库操作的示例代码:
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from mymodels import User, Item
# 创建 SQLite 数据库引擎
engine = create_engine('sqlite:///mydatabase.db')
# 创建会话工厂
Session = sessionmaker(bind=engine)
# 创建会话
session = Session()
# 添加一个用户
user = User(name='Alice', age=25)
session.add(user)
# 查询所有用户
users = session.query(User).all()
# 删除一个物品
item = session.query(Item).get(1)
session.delete(item)
# 提交事务
session.commit()
# 关闭会话
session.close()
在上面的例子中,我们首先使用 create_engine
方法创建了一个 SQLite 数据库引擎。然后,我们使用 sessionmaker
创建了一个会话工厂,将引擎绑定到该工厂上。接着,我们使用会话工厂创建了一个会话对象,并进行了一系列的数据库操作,包括添加用户、查询用户、删除物品等。最后,我们使用 session.commit
提交了事务,并手动关闭了会话。
总结
在本文中,我们介绍了 SQLAlchemy 中 engine、connection 和 session 这三个重要的概念及其区别。engine 是与数据库进行交互的主要接口,负责管理数据库连接池、执行 SQL 语句等底层操作;connection 是 engine 对象的一个实例,表示与数据库的一个会话连接,通过它我们可以执行多条 SQL 语句;session 是 SQLAlchemy 中最高层的抽象,代表了一个数据库会话,通过它我们可以完成大部分数据库操作,包括增、删、改、查、事务等。掌握这些概念和它们之间的区别,对于使用 SQLAlchemy 进行数据库操作将会有很大的帮助。