FastAPI开发 | MySQL数据库连接方案

简介

目前,解决Python连接MySQL数据库技术存在如下四种方案:
FastAPI开发 | MySQL数据库连接方案

其中,MySQL-python:也就是MySQLdb。是对C语言操作MySQL数据库的一个简单封装。遵循了Python DB API v2。但是,目前只支持Python2,还不支持Python3。
MySQL Connector/Python是【MySQL官方】推出的使用纯Python连接MySQL的驱动。因为是纯Python开发的。效率不高。
pymysql也是纯Python实现的一个驱动。因为是纯Python编写的,因此执行效率不如MySQL-python。并且也因为是纯Python编写的,因此可以和Python代码无缝衔接。使用前提如下:

  • CPython 3.6+
  • MySQL 5.6+

MySQLdb只支持python 2.x 版本,mysqlclient 是MySQLdb的一个分支,解决了python 3.x 的兼容问题。

【注意】pymysql 和 mysqlclient 目前是python连接mysql 的主流方式。这两个库的作者是同一个人INADA Naoki。根据作者本人的介绍,mysqlclient 速度比pymysql 更快;但是pymysql更加简单易使用。另外,作者建议一般要选择 mysqlclient,除非以下三种情况:

1)你不能用mysqlclient出于某种原因

2)你想使用gevent or eventlet 配合

3) 考虑mysql协议兼容性

mysqlclient 2.0.3来了

因此,如今无论在哪一种开发平台上,首先应当考虑mysqlclient方案。但是,在2.0版本出现以前,在WINDOWS平台上,往往要下载对应的.whl文件安装才可正常使用——一旦版本不匹配,则无法使用。随着2.0.3版本的出现,在WINDOWS7+Python3平台上使用这种方案变得十分顺利!

我的测试环境是:

  • Windows 7 SP1 64BITS
  • PyCharm 2020.1
  • Python 3.8.4(内置pipenv支持)
  • FastAPI 0.63.0

较细致介绍如下:

安装mysqlclient 2.0.3

你可以选择全局安装,但使用Pipenv虚拟环境下安装更推荐(我使用了后者)。

pip mysqlclient

安装后,Pipfile文件内容(所有内容)如下:


[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
sqlalchemy = ""
fastapi = "
"
mysqlclient= "*"
[requires]
python_version = "3.8"


运行pip list命令检测也没有问题!

值得注意的一个小细节是,上面安装后,其实安装了库名是MySQLdb,参考下图:
FastAPI开发 | MySQL数据库连接方案

因此,上面有导入语句:
from MySQLdb import *

FastAPI开发中有关代码

FastAPI开发 | MySQL数据库连接方案

请注意上面常量字符串SQLALCHEMY_DATABASE_URL的表达,如果使用pymysql解决方案应当更改如下:

SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:x5@localhost:3306/sqltest"

在创建MySQL表格并启动数据库服务器引擎后,测试正常!有关关键代码请参考最后一处引文中的内容。

小结

本文归纳了Python连接MySQL数据库的四种方案。当然,Python大环境已经向3.X版本全面迁移。因此,基于Python 3的实战开发中,至少目前更应当关键pymysql和mysqlclient这两种方案。但是,相信随着Python在开发工具中战略位置的不断提升,MySQL官方开发的纯Python方案MySQL Connector/Python很有可能会逐渐向C实现方案转移,毕竟服务端与数据库的大数据量下的交互是影响系统性能瓶颈的一大重要因素。

参考

https://pypi.org/project/mysqlclient/
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
https://pypi.org/project/mysql-connector-python/
https://pymysql.readthedocs.io/en/latest/user/examples.html
https://fastapi.tiangolo.com/tutorial/sql-databases/

猜你喜欢

转载自blog.51cto.com/zhuxianzhong/2621905