下载帮

您现在的位置是:首页 > 数据库 > MySQL

MySQL

Python连接Mysql数据库的几种方式以及问题排查方法

2022-05-25 09:45MySQL

一、使用pymysql连接Mysql数据库

连接示例:

conn = pymysql.connect(host=host,user=user,password=passwd,db=db,port=int(prot),charset='utf8mb4')

pymysq源代码:

创建连接的源代码如下,可根据注释参考param host自行添加所需参数。

pymsql

 

二、 使用sqlalchemy连接Mysql数据库

示例:

bind=create_engine(“mysql+pymysql://username:password@ip:port/database?charset=charset”, echo_pool=False)

sqlalchemy源代码:

数据库初始化源代码如下,可根据注释参考param echo_pool自行添加所需参数。

三、 使用flask_sqlalchemy连接Mysql数据库

如果我们使用了Flask框架,可以使用flask_sqlalchemy作为数据库访问组件,它可以帮助我们生成数据库模型、管理连接池等等。

示例:

app.config['SQLALCHEMY_DATABASE_URI'] = “mysql+pymysql://username:password@ip:port/database?charset=utf8mb4

db = SQLAlchemy(app)

flask_sqlalchemy源代码:

源代码如下,可参考“SQLALCHEMY_DATABASE_URI”根据需要自行添加参数:

四、异常问题排查方法

当数据库出现问题,或者默认连接池配置无法满足业务需求时,程序中可能会抛出数据库相关异常,如下图所示:

这时我们可以打开日志输出,方便定位问题调整参数配置。

例如:

echo_pool设置为”debug”可以打开数据库连接池相关日志,方便调整连接池参数。

打开连接池日志后,我们可以看到类似下图所示的日志输出:

echo设置为True时,可输出sql语句详细日志。

connect_args 中的read_timeout可设置数据库连接读操作的超时时间,避免数据库网络异常时长时间等待,一般默认为30秒,示例中我们把超时时间设置为3秒。

sqlalchemy参数调整示例:

bind=create_engine(“mysql+pymysql://username:password@ip:port/database?charset=charset”,echo_pool=“debug”,echo=True ,connect_args={"read_timeout": 3})

flask_sqlalchemy参数调整示例:

app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {"echo":True,"echo_pool":"debug","connect_args":{"read_timeout": 3}

文章评论