3

我需要在 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 ""
4

1 回答 1

0

WSGI 应用程序可能由多个工作进程和线程提供服务。因此,您最终可能会有多个线程使用相同的连接。因此,您需要确定您的库的连接实现是否是线程安全的。查看文档,看看他们是否声称提供2 级线程安全

然后,您应该考虑在您的请求期间是否需要交易。如果您发现您需要事务(例如,请求发出多个数据库命令之间的状态不一致或可能的竞争条件),您应该使用不同的连接,因为事务始终是连接范围的。请注意,某些数据库系统或配置不支持事务或不将单独的连接彼此隔离。

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

于 2017-12-08T13:59:51.260 回答