python SQLAlchemy 中的Engine详解
Python SQLAlchemy 中的 Engine 详解
什么是 Engine?
在 SQLAlchemy 中,Engine 是与底层数据库 API 的交互接口。它可用于连接,管理连接,提供事物支持以及发出 SQL 命令和获取 SQL 查询结果。Engine 对象是 DBAPI 或 DBAPI 2 驱动程序中的 Connection 和 Cursor 对象的封装,用于数据库指令的生成和执行。
Engine 的连接字符串
连接串用于指定如何连接到底层数据库。连接字符串由 DBAPI 驱动程序中连接函数所期望的所有参数组成。常见的数据库连接字符串格式如下所示:
dialect+driver://user:password@host:port/database
其中,各个部分的含义如下:
-
dialect
:指定使用的数据库类型,如 MySQL,PostgreSQL,Oracle 等 -
driver
:指定使用的 DBAPI 驱动程序,如 pymysql,psycopg2,cx_Oracle 等 -
user
:数据库用户名 -
password
:数据库密码 -
host
:数据库地址 -
port
:数据库端口号 -
database
: 数据库名称
通过指定不同的 dialect 和 driver,可以实现与各种不同类型的数据库进行交互。
创建 Engine
为了创建一个 Engine 对象,首先需要使用 create_engine
函数创建一个引擎对象。下面是一个例子:
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://user:password@localhost:3306/test')
这个例子中,使用 create_engine
函数创建了一个 MySQL 数据库引擎。连接字符串 mysql+pymysql://user:password@localhost:3306/test
中,指定了使用 mysql
dialect,使用 pymysql
驱动程序,连接到 localhost
的 3306
端口,使用名为 test
的数据库。
连接到 Engine
有了 Engine 对象之后,我们就可以使用 connect
方法来连接到底层数据库。下面是一个例子:
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://user:password@localhost:3306/test')
conn = engine.connect()
这个例子中,我们首先创建了一个 MySQL 数据库引擎,然后通过 connect
方法连接到底层数据库,并将连接对象保存到 conn
变量中。
创建连接后,我们可以使用连接对象执行 SQL 查询。下面是一个例子:
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://user:password@localhost:3306/test')
conn = engine.connect()
result = conn.execute('SELECT * FROM test_table')
for row in result:
print(row)
这个例子中,我们首先创建了一个 MySQL 数据库引擎,然后通过 connect
方法连接到底层数据库。接着使用 execute
方法执行 SELECT 查询,并将结果保存在 result
变量中,最后通过循环遍历 result
对象,输出查询结果。
事务支持
在 SQLAlchemy 中,Engine 对象还提供了事务支持。使用 Engine 对象,我们可以方便地开启和提交事务。下面是一个例子:
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://user:password@localhost:3306/test')
conn = engine.connect()
tx = conn.begin()
try:
conn.execute('INSERT INTO test_table (name) VALUES ("Tom")')
conn.execute('INSERT INTO test_table (name) VALUES ("Jerry")')
tx.commit()
except:
tx.rollback()
raise
这个例子中,我们首先创建了一个 MySQL 数据库引擎,然后通过 connect
方法连接到底层数据库。接着使用 begin
方法创建一个事务对象 tx
,然后通过 execute
方法执行 INSERT 查询。最后使用 commit
方法提交事务。
总结
在本文中,我们介绍了 SQLAlchemy 中的 Engine,它是与底层数据库 API 交互的接口。我们通过示例代码演示了如何创建 Engine、连接到 Engine 和执行 SQL 查询,同时还介绍了 Engine 对象提供的事务支持。