python flask SQLAlchemy 出现OperationalError: (mysql.connector.errors.OperationalError) MySQL Connection not available.
在对flask使用SQLAlchemy的ORM功能时(注意:不是flask自带的SQLAlchemy),时而出现OperationalError: (mysql.connector.errors.OperationalError) MySQL Connection not available.这种错误
因为使用对数据库的连接使用短连接,一般在入口处定义数据库连接,在接口完成的地方关闭连接,是自己控制连接。
以前的时候没使用ORM,直接自己写原始sql语句,自己控制连接和关闭连接
针对错误在网上找了一番,试了两种方法:
1、查询出来的cursor没有被遍历过,但orm里面没有cursor啊,直接就有做好的方法,也不用自己去创建cursor
2、在使用 create_engine创建引擎时,如果默认不指定连接池设置的话,一般情况下,SQLAlchemy会使用一个 QueuePool绑定在新创建的引擎上。并附上合适的连接池参数。
在以默认的方法create_engine时(如下),就会创建一个带连接池的引擎。
engine = create_engine('postgresql://postgres@127.0.0.1/dbname')
在这种情况下,当你使用了session后就算显式地调用session.close(),也不能把连接关闭。连接会由QueuePool连接池进行管理并复用。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import NullPool
engine = create_engine('postgresql://postgres@127.0.0.1/dbname',
poolclass=NullPool)
Session = sessionmaker(bind=engine)
session = Session()
usr_obj_list = session.query(UsrObj).all()
print usr_obj_list[0].id
session.close()
红色部分是重点
按第二种方法改完之后,好像没有出现问题了
特此分享

浙公网安备 33010602011771号