2013-04-13 2 views
2

Я пытаюсь импортировать объект с именем db (объект SQLAlchemy) в модуле моего проекта Flask, чтобы использовать SQLAlchemy в моих моделях (models.py). Предполагая, что мой пакет называется Foo и содержит db объекта в его файл __init__.py, когда я пытаюсь сделать from Foo import db, я получаю следующее сообщение об ошибке:ImportError при импорте из нижнего модуля

ImportError: cannot import name db

Я использую КОЛБУ Blueprint, чтобы направить свой проект в два приложения (панель управления и интерфейс), и каждый из них содержит файл __init__.py. Только models.py бросает эту ошибку, я получил некоторый импорт в моем файле представлений (как импорт менеджера входа в систему), и все идет хорошо.

Любая идея о том, что это может быть?

ОБНОВЛЕНИЕ: отслеживающий

Traceback (most recent call last): 
    File "run.py", line 4, in <module> 
     from kuchiyose import app 
    File "/path_to_project/kuchiyose/kuchiyose/__init__.py", line 60, in <module> 
     from kuchiyose import dashboard, frontend 
    File "/path_to_project/kuchiyose/kuchiyose/dashboard/__init__.py", line 10, in <module> 
     from dashboard import views 
    File "/path_to_project/kuchiyose/kuchiyose/dashboard/__init__.py", line 10, in <module> 
     from dashboard import views 
    File "/path_to_project/kuchiyose/kuchiyose/dashboard/views.py", line 8, in <module> 
     from kuchiyose.dashboard.models import User 
    File "/path_to_project/kuchiyose/kuchiyose/dashboard/models.py", line 3, in <module> 
     from kuchiyose import db 

ImportError: cannot import name db 
+0

объект или класс 'db'? – Aprillion

+0

Это экземпляр класса SQLAlchemy. Вот почему я сказал объект – phndiaye

+0

Я отредактировал мой вопрос, чтобы добавить Traceback – phndiaye

ответ

6

Во-первых, спасибо за помощь. Что касается моего второго вопроса: «Как импортировать модели Flask в представления без циклической проблемы с импортом (при использовании SQLAlchemy)», я нашел решение. Он состоит в том, чтобы установить объект SQLAlchemy не в файл приложения __init__.py, а в файл models.py. При этом вы можете импортировать его в свой файл views.py без проблем.

Мой файл models.py, теперь:

from kuchiyose import app 
from flask.ext.sqlalchemy import SQLAlchemy 

db = SQLAlchemy(app) 

И мой views.py

from kuchiyose.dashboard import models 
+1

Вы можете отметить свой ответ как правильный – ersentekin

4

, как представляется, круговые импорт:

  • kuchiyose/__init__.py импорт из kuchiyose.dashboard.views
  • kuchiyose/dashboard/views.py импорта из kuchiyose.dashboard.models
  • kuchiyose/dashboard/models.py импорта из kuchiyose

см., Например, Circular (or cyclic) imports in Python для получения дополнительной информации ...

+2

Спасибо за помощь, это действительно помогло (у меня были «импортные представления», которые поднимали циклический импорт). Но вот импорт импорта служит для загрузки представлений моего приложения. Итак, у вас есть представление о том, как я могу это сделать сейчас? (если вы разработчик Flask) – phndiaye

6

Это старая, но появился как верхний результат в моем поиске.

У меня есть проект, который имеет декларации модели в нескольких разных местах, а не в консолидированном файле models.py, чтобы это решение не было идеальным. Я нашел импорт ваших просмотров ПОСЛЕ установления того, что объект db работает.

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config.from_object('config') 

db = SQLAlchemy(app) 

# Now Register routes 
# db is now defined so app import db will now work) 
from routes.user import user as user_routes 
app.register_blueprint(user_routes) 
Смежные вопросы