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 驱动程序,连接到 localhost3306 端口,使用名为 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 对象提供的事务支持。

相关文章