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 对象提供的事务支持。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python SQLAlchemy 中的Engine详解 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • python根据日期返回星期几的方法

    下面是详细讲解“python根据日期返回星期几的方法”的完整攻略。 方法一:使用datetime模块 要根据日期返回星期几,我们可以使用Python内置的datetime模块。具体步骤如下: 导入datetime模块。 import datetime 使用datetime模块中的strptime()函数将日期字符串转为datetime对象。 date_str…

    python 2023年6月2日
    00
  • Python获取脚本所在目录的正确方法

    当我们编写Python程序时,有时需要获取当前执行文件所在的目录。获取程序所在目录在处理文件读取、文件写入、文件路径转换等场景下都是非常必要的。Python提供了多种方式获取执行文件所在目录,但是有些方式并不正确,因此在本文中将为大家介绍Python获取脚本所在目录的正确方法。 方法一:使用os.path Python中的os.path模块可以用于操作文件路…

    python 2023年6月2日
    00
  • python使用protobufde的过程解析

    以下是关于“Python使用Protobuf的过程解析”的完整攻略: 什么是Protobuf? Protocol Buffers(简称 Protobuf)是由 Google 开发的一种轻量级的数据序列化协议。与 XML 和 JSON 等常见的数据交换格式相比,Protobuf 的效率更高、数据体积更小。根据 Google 官方文档的描述,Protobuf 压…

    python 2023年6月3日
    00
  • 在Python的Flask框架中实现全文搜索功能

    以下是“在Python的Flask框架中实现全文搜索功能”的完整攻略: 一、全文搜索功能的基本原理 全文搜索是一种基于文本内容的搜索技术,它可以在文本中查找特定的关键字或短语,并返回包含这些关键字或短语的文本。全文搜索通常使用倒排索引(Inverted Index)来实现,它将文本中的每个单词映射到包含该单词的文档列表中。 在实现全文搜索功能时,我们需要将文…

    python 2023年5月14日
    00
  • Python:分层切片

    【问题标题】:Python: Hierarchical SlicingPython:分层切片 【发布时间】:2023-04-04 03:45:01 【问题描述】: 是否有更 Pythonic/numpythonic 的方式来进行某种嵌套/分层切片,即更漂亮的版本: _sum = 0 for i in np.arange(n): _sum += someFun…

    Python开发 2023年4月6日
    00
  • Python中的线程操作模块(oncurrent)

    当涉及到需要同时执行多个任务的时候,线程就是一个非常方便且高效的解决方案。Python内置了线程操作的模块,名为concurrent,是一个非常强大的多线程处理工具包。在下面的攻略中,我们将会讲解concurrent模块中最常用到的功能和具体应用方法。 线程和进程 在开始讲解concurrent模块之前,我们先来对比一下线程和进程两个概念。 线程是程序中执行…

    python 2023年5月19日
    00
  • 在 Python 中验证 ctypes 类型精度

    【问题标题】:Verifying ctypes type precision in Python在 Python 中验证 ctypes 类型精度 【发布时间】:2023-04-01 20:50:01 【问题描述】: 如果 API 需要 64 位类型,如果 sizeof 返回字节数,我如何检查 ctypes 类型是否有那么多位? 如何知道当前平台上每个字节有多…

    Python开发 2023年4月8日
    00
  • 微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧

    微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧攻略 微信跳一跳游戏是一款趣味性很高的小程序,很多人都对其颇为着迷,而我们今天要介绍的是,如何使用Python脚本在跳一跳游戏中刷高分。 原理 微信跳一跳游戏的规则很简单,点击小人使其跳跃,跳跃的高度决定于点击屏幕的时间长短,而跳到不同的物块上可以得到不同的分数,游戏的目标就是得到尽可能高的分数。 而我们…

    python 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部