将非线程SQLAlchemy代码与Flask-SQLAlchemy集成 - python

我有一个Python模块UserManager,它负责与用户管理相关的所有事情-用户,组,权限,身份验证。通过在构造函数中传递SQLAlchemy引擎参数的主类提供对这些资产的访问。需要引擎来进行表类映射(使用映射器对象)并发出会话。

这是在app模块中建立gobal变量的方式:

class UserManager:

    def __init__(self, db):
        self.db = db
        self._db_session = None
        meta = MetaData(db)

        user_table = Table(
            'USR_User', meta,
            Column('field1'),
            Column('field3')
        )
        mapper(User, user_table)

    @property
    def db_session(self):
        if self._db_session is None:
            self._db_session = scoped_session(sessionmaker())
            self._db_session.configure(bind=self.db)
        return self._db_session

class User(object):
    def init(self, um):
        self.um = um

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
um = UserManager(db.engine)

这样的模块被设计为与上下文无关,因此可以用于本地运行和Web应用程序。

但是这里出现了问题:我有时会遇到可怕的“无法重新连接,直到无效事务回滚”错误,这大概是由于UserManager代码中的某些事务失败引起的。

我现在正在尝试找出问题根源。也许在Web服务器的动态上下文中如何处理数据库不是正确的方法?也许我必须将db.session传递给um对象,以便可以确定db连接没有混淆?

参考方案

在网络环境中,您应该考虑隔离每个用户的请求。为此,您必须使用flask.g

共享仅对一个功能的一个请求有效的数据
另一个,全局变量不够好,因为它将破坏
在线程环境中。Flask为您提供了一个特殊的对象
确保它仅对活动请求有效,并且将
为每个请求返回不同的值。简而言之:
正确的事情,就像处理请求和会话一样。

您可以了解有关here的更多信息。

flask sqlalchemy-根据数据库中的列动态生成数据模型 - python

有没有一种方法可以根据Flask SQLAlchemy的数据库表中的列动态生成数据库模型?我有一个应用程序来显示数据库表中的数据,但是列名有时会更改并破坏我的应用程序。我希望有一种方法可以根据数据库中的实际列名动态​​生成数据模型。我目前明确声明所有列,如下所示。class MyDbModel(db.Model): __tablename__ = '…

Flask_SQLAlchemy无法像SQLAlchemy那样反映数据库 - python

我正在尝试使用python-Flask将Foreigner Database连接到Flask_SQLALchemy应用我到处都看过,包括FLASK_SQLALCHEMY official doc 过去4天里,我一直在Internet上到处寻找FLASK_SQLALCHEMY中没有ORM库的任何教程,但运气不佳我一直在查看SQLAlchemy Reflecti…

Flask Cors无法运作 - python

我正在尝试在Flask应用程序中启用CORS,但无论我把来源如何,似乎总是可以从浏览器访问URL。我不知道我做错了什么。这是我的代码from flask import Flask, jsonify from flask_cors import CORS app = Flask(__name__) CORS(app, resources={r'/*&…

flask:异常后停止服务器 - python

我想在发生未处理的异常时立即停止我的Flask服务器。这是一个例子:from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): 1/0 # argh, exception return 'Hello World!' i…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…