龙空技术网

Python通过"SQLAlchemy-Raw_SQL"方式来访问操作MySQL数据库

清枫Jason 173

前言:

而今大家对“mysql选项”都比较看重,大家都需要学习一些“mysql选项”的相关资讯。那么小编也在网络上搜集了一些关于“mysql选项””的相关资讯,希望你们能喜欢,我们快快来了解一下吧!

前言

Python支持通过多种方式访问MySQL数据库。可能有些刚入门的朋友们对Python访问MySQL数据库还不是很熟悉,故计划对Python访问MySQL数据库的这几种方式分别作一介绍。

本系列第一篇中已经对 "Python通过MySQL Connector/Python驱动接口来访问操作MySQL数据库" 进行了介绍。

本系列第二篇中已经对 "Python通过PyMySQL驱动接口来访问操作MySQL数据库" 进行了介绍。

本系列第三篇中已经对 "Python通过MySQLdb驱动接口来访问操作MySQL数据库" 进行了介绍。

本文是本系列的第四篇,对 “Python通过SQLAlchemy-Raw_SQL方式来访问操作MySQL数据库” 进行介绍。

本文以Windows平台上开发为例进行讲解,相关基本开发环境为:(1) Windows 7 (64位);(2) MySQL v8.0.21;(3) Python v3.8.5;(4) PyMySQL v0.10.0;( 5) SQLAlchemy v1.3.18。

本次分享的内容目录如下:

前言

SQLAlchemy 介绍

SQLAlchemy 安装

Python通过SQLAlchemy访问数据库的方式

SQLAlchemy-Raw_SQL方式介绍

SQLAlchemy-Raw_SQL示例代码

结束语

1. SQLAlchemy 介绍1.1 SQLAlchemy简介

SQLAlchemy的SQL工具包及对象关系映射器是一组用于处理Python访问操作数据库的综合工具。它具有几个不同的功能区域,可以单独使用或组合使用。其主要组件如下图所示,组件依存关系分为多个层:

SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchemy采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。

SQLAlchemy是Python编程语言下的一款开源软件,使用MIT许可证发行。SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于Django的ORM框架。

SQLAlchemy资源信息如下:

(1) SQLAlchemy官网主页:

(2) SQLAlchemy官网文档:

(3) SQLAlchemy项目(PyPI):

(4) SQLAlchemy最新版本:1.3.18(2020年6月26日)

1.2 dialect简介

dialect是SQLAlchemy用于和DBAPI进行通信,根据配置文件的不同调用不同的DBAPI,进而实现对数据库的操作。

注意:所有的dialect都需要安装适用的DBAPI驱动,否则会一直连接不上数据库。

本文主要是讲解通过SQLAlchemy方式来访问操作MySQL数据库的,所以下面只介绍跟MySQL相关的部分。

SQLAlchemy支持MySQL从4.1版本到最新版本。SQLAlchemy支持MySQL数据库的dialect/DBAPI选项主要如下表:

注:以上各种dialect/DBAPI选项中,官方推荐使用mysqlclient和PyMySQL选项,其他选项因尚存相关问题而暂不推荐使用。

2. SQLAlchemy 安装2.1 MySQL下载安装

省略,详见第三篇中对应章节(第2.1章节)内容。

2.2 Python下载安装

省略,详见第三篇中对应章节(第2.2章节)内容。

2.3 PyMySQL下载安装

省略,详见第二篇中对应章节(第2.3章节)内容。

2.4 SQLAlchemy下载安装

SQLAlchemy可以通过pip命令来完成下载安装。

注:在Windows上,SQLAlchemy的默认安装位置为:{python安装路径}\Lib\site-packages。如本机Python安装在C:\Develop\Python目录下,则SQLAlchemy安装在C:\Develop\Python\Lib\site-packages目录下。

可以通过以下命令来对安装进行验证:

3. Python通过SQLAlchemy访问数据库的方式

本文第1章有介绍过SQLAlchemy不同的功能区域可以单独使用或组合使用,因此目前Python可以通过以下三种SQLAlchemy方式来访问数据库:

(1) SQLAlchemy-Row_SQL方式

(2) SQLAlchemy-SQL_Expression方式

(3) SQLAlchemy-ORM方式

这三种方式的简单对比分析如下表所示:

本文限于篇幅,只介绍第(1)种SQLAlchemy-Raw_SQL方式。

4. SQLAlchemy-Raw_SQL方式介绍4.1 SQLAlchemy-Raw_SQL方式的执行流程

Python通过SQLAlchemy-Raw_SQL方式访问操作MySQL数据库的完整执行流程如下:

– (1) 导入SQLAlchemy模块

– (2) 创建引擎(含定义数据库连接路径)

– (3) 定义原生SQL语句

-- (4) 创建连接(通过创建好的引擎在连接池中建立起真正的数据库连接)

-- (5) 执行SQL语句(基于连接使用dialect调用DBAPI,然后将SQL语句交给它去执行)

SQLAlchemy-Raw_SQL方式最大的优点是非常容易理解掌握(跟Python通过MySQL Connector\Python、PyMySQL、MySQLdb驱动接口访问MySQL数据库类似)。

4.2 相关方法及概念介绍一、导入SQLAlchemy

在Python中导入sqlalchemy模块:

import sqlalchemy

在实际编码时,为简化代码,一般不直接使用import sqlalchemy,而是使用sqlalchemy模块中直接用到的相关部分,参考如下:

from sqlalchemy import create_engine......

二、定义连接路径

要连接数据库,需要一个连接路径,连接路径格式如下:

<dialect>+<driver>://<username>:<password>@<host:port>/<database>[?<options>]

如:定义一个通过dialect/DBAPI选项(PyMySQL驱动程序)到MySQL数据库(数据库名mydb,数据库用户名myuser,数据库密码mypasswd,数据库主机名127.0.0.1,数据库主机端口号3306)的连接路径,则其示例代码参考如下:

三、创建引擎

Engine是任何SQLAlchemy应用程序的起点。它通过连接池和Dialect传递信息给SQLAlchemy应用程序,它描述了如何与特定类型的数据库/DBAPI组合进行通信。

引擎的总体架构图示如下:

有了连接路径以后,创建引擎只需要发出一个调用 create_engine()即可:

from sqlalchemy import create_engine······myengine = create_engine(DB_URL, max_overflow=10, echo=False)

create_engine()说明:

——create_engine()方法通过Dialect创建了一个数据库引擎对象(此时尚未真正连接MySQL数据库)。仅在首次调用Engine.connect() 或 Engine.execute()方法时,Pool对象才会在127.0.0.1:3306上真正建立一个DBAPI的数据库连接。

——参数DB_URL:数据库连接路径

——参数max_overflow:表示设置连接池中连接数目, 默认为10;

——参数echo :表示打印转换后的每条SQL语句,方便调试,生产环境下可以设置为 False。

四、创建连接

有了引擎以后,可以通过connect()方法来创建一个连接对象(此时才真正连接到MySQL数据库):

myconn = myengine.connect()

五、执行SQL

有两种执行SQL的方式如下表所示:

5. SQLAlchemy-原生SQL 示例代码

下面针对Python通过SQLAlchemy-原生SQL方式访问MySQL数据库常见的操作(如:连接数据库、创建数据库、删除数据库、创建数据表、删除数据表、插入数据记录、删除数据记录、修改数据记录、查询数据记录等)分别给出一个较为完整的入门示例(含详细代码注释)。

注:本示例代码使用的dialect/DBAPI选项是PyMySQL,所以必须提前安装好PyMySQL驱动(可通过命令pip install pymysql完成安装),否则会一直连接不上MySQL数据库。如果想使用dialect/DBAPI选项是mysqlclient,则请提前安装好MySQLdb驱动(可通过命令pip install mysqlclient完成安装)。

5.1 创建数据库连接示例5.2 创建数据库示例

注意:在通过create_engine()方法创建引擎时,参数DB_URL中包含的数据库名DB_NAME必须实际存在,否则后续无法真正连接MySQL数据库。因此在通过SQLAlchemy创建一个新的MySQL数据库时,可以采用创建引擎时参数DB_URL中包含的数据库名DB_NAME为已经存在一个数据库名,而在创建数据库SQL语句里给的是待新创建的数据库名DB_NEW_NAME。

5.3 删除数据库示例5.4 创建数据表示例5.5 删除数据表示例5.6 插入数据记录示例5.7 批量插入数据记录示例5.8 删除数据记录示例5.9 修改数据记录示例5.10 查询数据记录示例

根据读取数据的多少,应采用不同的方法:

(1) 如果读取全部数据,使用fetchall() 方法。

(2) 如果读取多条数据,使用fetchmany(n) 方法。

(3) 如果读取一条数据,使用fetchone()方法。

结束语

通过上面的介绍,相信感兴趣的朋友们已经对Python通过SQLAlchemy-Raw_SQL来访问操作MySQL数据库有了一个基本的入门了解了。想掌握更多详细内容,请查看SQAlchemy官网文档()。

本系列下一篇文章将针对 “Python通过SQLAlchemy-SQL_Expression来访问操作MySQL数据库” 进行介绍,敬请关注后续文章!

本文为原创,如果文章对您有所帮助,喜欢的话就点个赞加关注支持一下哈:)

标签: #mysql选项 #java数据库访问步骤 #java解析sql工具包