前言: 最近做内部运维数据的数据仓库,最终将Hive中的数据清洗后需要业务决策相关的数据进行结构化处理,并存储到关系型数据库MySQL中,以供后期对外接口使用。本篇简单记录下使用Python操作MySQL数据库的简单操作。
MySQL数据库环境准备
注意:在当前容器化基础设施已经全面覆盖的时代,为了快速验证效果,我们及其推荐使用以Docker为代表的容器化基础设施来快速构建你的基础环境。
在DockerHub上有丰富的基础中间件的镜像,我们可以使用Docker快速的构建我们的MySQL基础环境,而不必每次重新安装各种复杂的中间件环境,因为我们只是使用者,我相信每个团队都会有专门的中间件维护者。好吧,如果没有,那你依然可以自己根据实际的需求和标准进行构建Docker镜像,这样就为我们创造了一个未来很长一段时间可复用的组件。总之,想说的一件事就是,下面的MySQL环境是用Docker容器跑的。
|
|
至此,一个MySQL数据库已经准备好,需要我们注意的是,因为使用的是官方的Docker image,我们需要进行相关配置的检查和设置,否则可能会为后期的操作造成一定麻烦,比如设置数据库的字符编码.
让MySQL支持中文,一般而言需要关注以下几个点:
-
- 修改MySQL配置中客户端和服务端的字符编码为
utf8
,分别为[mysqld的default-character-set和character-set-server参数以及client的default-character-set参数]
- 修改MySQL配置中客户端和服务端的字符编码为
-
- 创建表时指定表的字符编码(default charset=utf8;)
-
- 链接数据库的时候指定链接字符编码(charset=utf8)
-
- 使用Python操作数据库时需要对Python文件进行utf8支持(#encoding=utf-8和sys.setdefaultencoding(utf-8))
-
- 使用
show variables like '%char%';
命令检查mysql字符集是否为utf8格式
,并使用SET NAMES UTF8; 或者set character_set_server = utf8;
进行设置
- 使用
使用Python进行操作MySQL
首先,在使用之前我们需要对Python版的MySQL库有一个了解,当前主流的库有MySQLdb
,PyMySQL
和SQLAlchemy
.
MySQLdb
:一般是Linux系统发行版中默认支持的,通常包名为Python-MySQL
,核心由C语言打造,接口精炼,性能最棒,缺点是环境依赖较多,安装复杂,近两年已停止更新,只支持Python2,不支持Python3PyMySQL
:纯python打造,接口与Python-MySQL兼容,安装方便,支持Python3SQLAlchemy
: 一个ORM框架,它并不提供底层的数据库操作,而是要借助于MySQLdb、PyMySQL等第三方库来完成,目前SQLAlchemy在Web编程领域应用广泛备注:其实还有类似mysqlclient之类的库,主要集成在一些web框架中作为依赖
由于为了快速实现业务逻辑,在接下来的操作中主要使用PyMySQL
库进行操作数据库,虽然性能不及MySQLdb
,但是可以使用pymysql.install_as_MySQLdb()
来兼容MySQLdb
,在业务正式上线时可以不改变业务代码逻辑而平滑的使用MySQLdb
库。
安装pymysql库
在Linux
环境下,大多数系统工具使用Python语言进行编写,因此在安装额外的Python模块时,通常会有几种选择:
-
- 使用系统自带工具安装
apt-get install or yum install
,该种方式会将模块默认安装的系统环境,可能会影响系统环境
- 使用系统自带工具安装
-
- 使用Python原声的包管理工具
pip install
,该种方式会默认安装到pip
命令所在的Python解释环境下,因此取决于Python环境是否独立于系统环境的Python,通常情况下会使用pyenv
之类的工具进行环境隔离
- 使用Python原声的包管理工具
-
- 使用包管理工具
conda
相关工具进行管理python,可以有效管理python多环境依赖,并且可以很方便构建数据科学相关环境.conda使用指南
- 使用包管理工具
|
|
python链接MySQL以及基本使用
使用pymysql库操作mysql
|
|
尝试用python脚本进行数据库操作
|
|
MySQL数据库常用的一些操作
注意:在之前我们创建的MySQL实例中仅是一个空的数据库,在实际使用之前,我们需要进行数据库的库表结构创建,以及相关的数据库授权,而这一部分操作通常会由专业的数据库管理员(DBA)进行操作和处理
接下来对一个website
数据库和use
表进行操作:
|
|
对指定数据库进行相关查询操作
|
|
对MySQL数据库进行插入操作
注意:插入操作分为单条记录插入和批量插入,一般数据库都支持批量插入方法,在pysql中为cursor.executemany(sql,args)
为我们的mysqlObj类增加一个插入操作:
|
|
源码
|
|