не могу импортировать базу данных flask

это main.py:

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy
if __name__ == '__main__':
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///user.db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    db = SQLAlchemy(app)
    class Users(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        email = db.Column(db.String, nullable=False)
        password = db.Column(db.String, nullable=False)
        key = db.Column(db.String, nullable=False)
    @app.route('/')
    def index():
        return render_template('index.html')
    @app.route('/login')
    def login():
        return render_template('log-in-form.html')
    @app.route('/signup')
    def signup():
        return render_template('sign-up-form.html')


    app.run()

что бы создать базу данных нужно импортировать из main bd.

from main import db

но выдает ошибку:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'db' from 'main' 
(C:\Users\ANDREY\PycharmProjects\mediaprojectreturn\main.py)

Помогите пожалуйста! Если что то сделал не так извиняюсь - первый раз на форуме. Спасибо


Ответы (1 шт):

Автор решения: Andy Pavlov

Смотрите. Запуск app.run() выносим в if __name__ == '__main__':. Все остальное выносим из под него.

Все, что под строкой if __name__ == '__main__' не будет выполняться при импорте. А Вы под него как раз туда все объявление засунули.

Файл main.py

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///user.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)


class Users(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String, nullable=False)
    password = db.Column(db.String, nullable=False)
    key = db.Column(db.String, nullable=False)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/login')
def login():
    return render_template('log-in-form.html')


@app.route('/signup')
def signup():
    return render_template('sign-up-form.html')


if __name__ == '__main__':
    app.run()

Файл db_make.py

from main import db

db.create_all()
→ Ссылка