如何解决带Psycopg2的烧瓶数据库池
从池中获取连接并为每个请求创建一个新的游标是否会影响性能?
class Query:
pool = None
connection = None
cursor = None
error = {}
def __init__(self,pool):
self.pool = pool
self.connection = self.pool.get()
self.cursor = self.connection.cursor()
def run(self,query,parameters=None):
try:
self.execute(query,parameters)
except (
psycopg2.errors.AdminShutdown,psycopg2.NotSupportedError,psycopg2.ProgrammingError,psycopg2.DataError,psycopg2.IntegrityError,psycopg2.OperationalError,psycopg2.InterfaceError,psycopg2.InternalError,psycopg2.DatabaseError,Exception
) as e:
try:
# Memorize error
if 'execute' not in self.error:
self.error.setdefault('execute',[])
self.error['execute'].append(e)
# Make new connection and cursor and run the query again
self.__init__(self.pool)
self.execute(query,parameters)
except (
psycopg2.errors.AdminShutdown,Exception
) as e:
DatabaseQueryFailed(e)
def execute(self,parameters=None):
self.cursor.execute(query,parameters)
def row(self):
return self.cursor.rowcount
def fetch(self):
return self.cursor.fetchall()
def close(self):
self.cursor.close()
self.pool.put(self.connection)
@api.route('/hello',methods=['GET'])
@a.token
def hello_route():
q = Query(current_app.db)
q.run('''
SELECT
prod_article_pub_id as id
FROM products.articles
''')
fetch = q.fetch()
q.close()
del q
return {'status': 'ok','row': fetch,'method': a.request.method}
还是在启动应用程序时打开游标并将其用于多个请求更好?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。