@AloneWasser

Did you forget to call 'init_app', or did you create multiple 'SQLAlchemy' instances?

/app.py/

from flask import Flask, jsonify, request, render_template, redirect, flash, url_for, session

from flask_sqlalchemy import SQLAlchemy

import hashlib

import string

import random

app = Flask(name) app.template_folder = 'C:\Users\AloneWasser\Desktop\21\templates'

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///C:\Users\AloneWasser\Desktop\21\instance...'

UPLOAD_FOLDER = 'C:\Users\AloneWasser\Desktop\21\' app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

db = SQLAlchemy(app)

from project.models import *

/models.py/

from project.app import db

from datetime import datetime

Ошибка, такова RuntimeError: The current Flask app is not registered with this 'SQLAlchemy' instance. Did you forget to call 'init_app', or did you create multiple 'SQLAlchemy' instances? Что делать с этим? Добавляя init_app выскакивает все та же ошибка, как фиксить?
  • Вопрос задан
  • 1471 просмотр
Пригласить эксперта
Ответы на вопрос 1
Frostealth
@Frostealth
Backend Developer
В приведенном вами примере на github (https://github.com/alonewasser/z) убираем хендлер сигнала @app.before_request и делаем следующее:

db = SQLAlchemy(app)
with app.app_context():
    from .models import *
    db.create_all()
    create_default_admin()


P.S. Рекомендую инициалицировать БД и добавлять администратора консольной (cli) командой. Перед первым запуском веб-приложения запустили нужную команду и забыли. И приложение не будет лезть лишний раз в БД при обработке каждого запроса.
пример cli

Объявление команд.
@app.cli.command('init_db')
def init_db():
    from .models import *
    db.create_all()

@app.cli.command('init_admin')
def init_admin():
    from .models import User
    db.session.add(User(username='admin', ...))
    db.session.commit()


Документация: https://flask.palletsprojects.com/en/2.3.x/cli/#cu...
Пример запуска команд в консоли
>>> flask --app project.app init_db
>>> flask --app project.app init_admin

Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы