我需要在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 ""
答案 0 :(得分:0)
WSGI应用程序可能由多个工作进程和线程提供服务。因此,您最终可能会使用相同的连接来创建多个线程。因此,您需要了解您的库的连接实现是否是线程安全的。查看文档,看看他们是否声称提供Level 2 thread safety。
然后,您应该反映在您的请求期间是否需要交易。如果您发现需要事务(例如,请求发出多个数据库命令,其间存在不一致的状态或可能的竞争条件),则应使用不同的连接,因为事务始终是连接宽的。请注意,某些数据库系统或配置不支持交易,也不会将单独的连接隔离开来。
因此,如果你共享一个连接,你应该假设你使用autocommit
开启(或者更好:实际上是这样做的。)