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()

红色部分是重点

按第二种方法改完之后,好像没有出现问题了

特此分享

 

posted @ 2017-12-25 18:25  lijiyu11408237  阅读(131)  评论(0)    收藏  举报