Python连接Mysql数据库的几种方式以及问题排查方法
一、使用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}