python - Python flask:让数据库连接更高效
问题描述
我在烧瓶中开发了一个基本的 webapp。在主页上,它有 3 条不同路线的链接,每条路线都指向一个单独的 html 页面,显示不同的结果。现在从 oracle 数据库表中获取结果。代码结构如下图所示。
@app.route('/route1')
def func1():
connection = cx_Oracle.connect("myuser/mypass@oracle.sub.example.com:1521/ora1")
\\read from database into variable var1
connection.commit()
connection.close()
return render_template('a.html', var = var1)
@app.route('/route2')
def func2():
connection = cx_Oracle.connect("myuser/mypass@oracle.sub.example.com:1521/ora1")
\\read from database into variable var2
connection.commit()
connection.close()
return render_template('b.html', var = var2)
@app.route('/route3')
def func3():
connection = cx_Oracle.connect("myuser/mypass@oracle.sub.example.com:1521/ora1")
\\read from database into variable var3
connection.commit()
connection.close()
return render_template('c.html', var = var3)
所以,我为每个新请求开始一个新的连接。它工作正常,但有没有更有效的方法来实现它?每个用户一次只能请求一项服务(路由)。因此,理想情况下,每个用户应该有一个到数据库的连接。那如何实施?或者有没有其他方法可以整体改善?该网络应用程序应该由 40-50 人使用。
解决方案
为每个请求连接到数据库不是一个有效的解决方案。您需要建立一个池连接并将其用于所有请求(在线程之间共享一个连接池)。所以,这里有必要保证线程安全。
对于您的数据库驱动程序,全局定义以下代码段(外部函数)并在函数内部使用它:
import cx_Oracle
# Create the session pool
pool = cx_Oracle.SessionPool(user="hr", password=userpwd,
dsn="dbhost.example.com/orclpdb1", min=2,
max=5, increment=1, encoding="UTF-8")
# Acquire a connection from the pool
connection = pool.acquire()
# your functions here
有关池连接的详细信息,请查看此处
推荐阅读
- javascript - React - 如何处理图像/文件的 403 错误
- awk - sed 匹配一个模式并插入换行符,后跟替换文本
- jsf - 如果触发了 onchange,有没有办法找出按钮单击
- swift - Kotlin 和 swift 全地图导航速度
- android - 滚动视图底部的粘滞按钮
- spring - 使用 spring-boot-admin 通过 HTTP 监控非 spring-boot 应用程序
- python - 在 nifti 文件中保存具有复杂组件的矢量
- android-gradle-plugin - 哪个 gradle 版本与最新的 Android Studio 3.5 一起使用?
- netlogo - 如何一次选择/询问更多品种?
- angular - 使用 Response -> HttpResponse 将项目从 Angular 5 迁移到 8 问题