【发布时间】:2020-08-12 10:10:18
【问题描述】:
我正在尝试将数据库连接分配给Flask.g,以便在我的整个应用程序中都可以访问它。
但是我遇到了错误:
RuntimeError: Working outside of application context.
文件app/database/__init__.py
from flask import current_app, g
from .connection import Connection
class Database:
def __init__(self, app):
if 'db' not in g:
g.db = Connection(app)
def get(self):
if 'db' in g:
return g.db
else:
g.db = Connection(current_app)
return g.db
文件app/database/connection.py
import psycopg2
import psycopg2.extras
from ..error import DatabaseConnectionFailed
class Connection:
connection = None
cursor = None
def __init__(self, app):
self.connect(app)
def connect(self, app):
try:
self.connection = psycopg2.connect(
user=app.config['APP_DB_PSQL_USER'],
password=app.config['APP_DB_PSQL_PASSWORD'],
host=app.config['APP_DB_PSQL_HOST'],
port=app.config['APP_DB_PSQL_PORT'],
database=app.config['APP_DB_PSQL_DATABASE'],
application_name=self.client(app)
)
self.connection.autocommit = True
self.cursor = self.connection.cursor(cursor_factory=psycopg2.extras.DictCursor)
except (psycopg2.NotSupportedError, psycopg2.ProgrammingError, psycopg2.DataError, psycopg2.IntegrityError, psycopg2.InternalError, psycopg2.OperationalError, psycopg2.DatabaseError, Exception) as e:
raise DatabaseConnectionFailed()
else:
logging.warning('Connected successfully to database!')
app/__init__.py
from flask import Flask, jsonify, request, redirect
from .database import Database
def create_app(settings):
app = Flask(__name__)
app.config.from_object(settings)
Database(app)
【问题讨论】: