2017-02-12 4 views
0

Это, как выглядит моя папка и файлы, такие как:импорта атрибут из родительского каталога

/app 
    __init__.py 
    /admin 
     __init__.py 
     models.py 

и app/__init__.py файл:

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 
from app.admin.models import * 


app = Flask('app') 

@app.route('/users', methods=['GET']) 
def show_users(): 
    return "list of all Users:\n" + User.query.limit(5).all() 

и app/admin/models.py:

from datetime import datetime 
from sqlalchemy.orm import relationship 
from flask_sqlalchemy import SQLAlchemy 
from app import app 


db = SQLAlchemy(app) 

class User(db.Model): 
    pass 

Я хочу иметь доступ к моей модели User в init файлах, из Import from parent directory и import script from a parenet directory я попытался from app import * или from .. import app или же поместить db = SQLAlchemy(app) в __init__ файл и импортировать его в models.py с from app import db или from .. import db, но я продолжаю получать app и db не определены, а также я думаю, что это странно, что я должен импортировать как файл в друг друга.

ответ

1

Ошибка в расширениях флэков, в то время как ваше приложение, созданное расширением sqlalchemy, не инициализировалось, поэтому оно вызывает ошибку. Лучшей практикой является сохранение расширений в том же месте:

#app/__init__.py 
... 
db = SQLAlchemy(app) 
from app.admin.models import * 

#app/admin/models.py 
... 
from app import db 

Если вы это сделаете, это сработает.

+0

У меня еще одна проблема: 'невозможно импортировать имя db' – Arman

+0

Импорт модели должен быть после инициализации расширения' db = SQLAlchemy (app) '' из app.admin.models import * ' – metmirr

+0

Теперь это работает! но почему определение db должно быть до импорта моделей? – Arman

Смежные вопросы