app.pyRuntimeError: al di fuori di lavoro del contesto applicativo
from flask import Flask, render_template, request,jsonify,json,g
import mysql.connector
app = Flask(__name__)
**class TestMySQL():**
@app.before_request
def before_request():
try:
g.db = mysql.connector.connect(user='root', password='root', database='mysql')
except mysql.connector.errors.Error as err:
resp = jsonify({'status': 500, 'error': "Error:{}".format(err)})
resp.status_code = 500
return resp
@app.route('/')
def input_info(self):
try:
cursor = g.db.cursor()
cursor.execute ('CREATE TABLE IF NOT EXISTS testmysql (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(40) NOT NULL, \
email VARCHAR(40) NOT NULL UNIQUE)')
cursor.close()
test.py
from app import *
class Test(unittest.TestCase):
def test_connection1(self):
with patch('__main__.mysql.connector.connect') as mock_mysql_connector_connect:
object=TestMySQL()
object.before_request() """Runtime error on calling this"
Sto importando app in test.py per l'unità testing.On chiamata Funzione 'before_request' in test.py, sta generando RuntimeError: funziona al di fuori del contesto dell'applicazione stesso sta accadendo a chiamare 'input_info()'
grazie @ brenns10 ha funzionato – guri
@ brenns10 puoi dirci di più su questo? Perché succede? – aks
@aks La pagina collegata probabilmente ha una spiegazione migliore di quella che potrei dare. Fondamentalmente, il modo in cui Flask è progettato, (1) il codice dovrebbe essere in grado di accedere a una variabile globale contenente l'oggetto dell'app Flask corrente, ma (2) potrebbero esistere più applicazioni in un singolo processo. Flask gestisce questo impostando alcune variabili prima di gestire una richiesta. Ma quando stai provando, devi impostare tu stesso il "contesto dell'applicazione", in modo che il tuo codice possa trovare le variabili globali corrette. – brenns10