我有一个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应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…