gpt4 book ai didi

python - WSGI 应用程序是否允许全局数据库连接?

转载 作者:行者123 更新时间:2023-12-05 07:38:44 25 4
gpt4 key购买 nike

我需要在 Flask 中创建一个简单的项目。我不想使用 SQLAlchemy。在下面的代码片段中,每个连接到服务器的人都使用相同的连接对象,但对于每个请求,都会创建一个新的游标对象。我问这个是因为我以前从未以这种方式使用过 Python DB api。这是正确的吗?我应该为每个请求创建一个新的连接对象,还是为每个请求或下面的方法使用相同的连接和游标对象。哪一个是正确的?

import mysql.connector
from flask import Flask, request
app = Flask(__name__)

try:
con = mysql.connector.connect(user='root',password='',host='localhost',database='pywork')
except mysql.connector.Error as err:
print("Something went wrong")

@app.route('/')
def home():
cursor = con.cursor()
cursor.execute("INSERT INTO table_name VALUES(NULL,'test record')")
con.commit()
cursor.close()
return ""

最佳答案

WSGI 应用程序可以由多个工作进程和线程提供服务。所以你最终可能会有多个线程使用同一个连接。所以你需要弄清楚你的库对连接的实现是否是线程安全的。查看文档,看看他们是否声称提供 Level 2 thread safety .

那么你在请求的过程中应该反射(reflection)自己是否需要交易。如果你发现你需要事务(例如,请求发出多个数据库命令,它们之间的状态不一致或可能存在竞争条件),你应该使用不同的连接,因为事务总是在连接范围内。请注意,某些数据库系统或配置不支持事务或不隔离彼此的单独连接。

因此,如果您共享一个连接,您应该假设您在 autocommit 的情况下工作(或者更好:实际这样做)。

关于python - WSGI 应用程序是否允许全局数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47714613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com