Python SQLAlchemy: engine, connection 和 session 的区别

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 进行数据库操作将会有很大的帮助。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程