TiDB 6.0 Book Rush | TiDB 和 Python 的 CRUD 应用开发实践
作者: ShawnYan 原文来源:https://tidb.net/blog/ef4c1f65
本文将介绍如何使用 Python 对 TiDB 进行应用开发,并做简单的 CRUD 演示。对应 TiDB 6.0 Book Rush 的第二章。
测试环境
为了便于演示应用开发,本文将使用 TiDB 6.0 本地测试集群,以及 MariaDB Connector/Python,具体环境版本信息如下。
TiDB 6.0
Python 3.6.8
MariaDB Connector/Python 1.0.11
部署本地测试集群
快速启动本地测试集群,具体方法请参考 官方文档–部署本地测试集群 和文章 《TiUP:TiDBAer 必备利器》。
本文使用的测试环境启动命令为:
运行结果为:
Python 连接器
介绍几种常见的 Python 连接器
TiDB 高度兼容 MySQL 5.7 协议,理论上只要是支持 MySQL 及其分支版本的 Python 连接器都可以连接 TiDB,但仍需要具体测试。
MySQL 官方提供的连接器为 MySQL Connector/Python。最新 GA 版本 8.0.29,官方文档推荐升级到最新版本,并声明此版本可用于 MySQL Server 8.0 和 5.7。
MariaDB 提供的连接器为 MariaDB Connector/Python。最新 GA 版本为 1.0.11,可用于访问 MariaDB 和 MySQL,使用的 API 与 Python DB API Spec 2.0 (PEP 249) 兼容。
除这两种官方连接器之外,还有两种常见的客户端,分别是:
Python 2 下使用的 MySQL-python,该包已停止维护,不推荐使用。
本文使用的是 MariaDB Connector/Python,下面将做具体演示。
安装 Python 连接器
CentOS 7 环境
由于 MariaDB Connector/Python 使用 Python 3 编写,且依赖 MariaDB Connector/C,所以需要先安装依赖包。
安装必要的依赖:
安装完成后,检查已安装的包:
通过 pip 安装连接器:
运行结果为:
安装步骤支持幂等性,二次执行命令结果如下:
安装完成后,检查已安装的包:
到此,安装完成!
Windows 环境
与 CentOS 环境类似,需要安装 MariaDB Connector/C,下载页面为 Connectors。
此外,还需要安装 Microsoft Visual C++ 14.0,下载页面为 Microsoft Visual C++ Build Tools。
本文示例代码是在 PyCharm 中开发的,所以在安装完成依赖后,直接在 PyCharm 中安装 MariaDB Connector/Python。
安装路径为:File > Settings > Project > Available Packages
。
图 - 安装 mariadb 包
到此,安装完成!
CURD 实践
基础数据
通过 tiup demo
创建基础数据,会自动在 TiDB 中创建库 bookshop
以及 6 张表,并导入基础数据。
Bookshop 是一个虚拟的在线书店应用,你可以在 Bookshop 当中便捷地购买到各种类别的书,也可以对你看过的书进行点评。
执行如下命令,生成基础数据:
运行结果为:
查看新建库
bookshop
表数据量:运行结果为:
使用 Python 连接器创建连接
需要配置连接信息,默认为不自动提交:
检查基本连接信息
可调用连接器内置方法,直接查看数据库版本和会话的字符集。发送查询语句,查看自动提交的参数值。
示例代码如下:
运行结果如下:
注:使用 MariaDB Connector/Python 连接数据库,会总是使用
utf8mb4
。
单值写入
下面将分别从:单值写入、多值写入、单值查询,以及多值查询,四种情况做演示。
向 books
表中插入一条数据,并在之后手动提交:
如果 TiDB Server 已开启 General 日志,则可以在日志文件中看到:
多值写入
也可将多组值包装到一个字典中,然后传递给执行器,此时就用到了 executemany
,可一次性执行多条语句,并将其封装在一个事务内,以保证写入数据的完整性。
演示代码如下:
TiDB Server 的 General 日志打印如下:
单值读取
因为 TiDB 使用 utf8_bin
做为默认校验规则,所以查询条件会区分大小写,这里使用内置函数 lower()
将所有字符转成小写,来消除大小写区分的影响。
使用
fetchone()
方法查询一条结果,并用|
作为分隔符将结果打印。控制台打印结果为:
多值读取
对于多值读取的情况,可使用 fetchmany(size: int)
方法,传入欲获取的行数后执行,即可得到需要的结果集。本例中,因为上文只写入 4 条数据,所以也只能查到 4 条,代码如下。
控制台输出结果:
小结
到此,以上四种情况已全部演示完毕。
最后,以一个完整示例作为本文结尾。
示例:查询
Books
表所在的 TiKV 节点的版本和地址,并输出结果。
输出结果为:
以上就是本文的全部内容,其他开发语言的开发实践,请参考官方文档,或扩展阅读。
扩展阅读
TiDB 应用开发专区 & 开发者手册 & 干货合集 @Billmay
TiDB 6.0 Book Rush!一起来分布式创作 6.0 的使用手册吧! @luzizhuo
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/cbe237b68e0cb95e7e0553968】。文章转载请联系作者。
评论