2013-04-13 19 views
2

我試圖在我的Flask項目模塊中導入名爲db(SQLAlchemy對象)的對象,以便在我的模型中使用SQLAlchemy(models.py)。假設我的包被命名爲Foo,包含db對象在他__init__.py文件,當我嘗試做一個from Foo import db,我得到以下錯誤:從較低模塊導入時導入錯誤

ImportError: cannot import name db

我用瓶藍圖派遣我的項目進入兩個應用程序(儀表板和前端),每個應用程序都包含一個__init__.py文件。只有models.py拋出這個錯誤,我在我的視圖文件(作爲導入登錄管理器)進口了一些,一切都很順利。

任何想法它可能是什麼?

UPDATE:所述回溯

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

object或class'db'? – Aprillion

+0

它是SQLAlchemy類的一個實例。這就是爲什麼我說對象 – phndiaye

+0

我編輯我的問題添加追溯 – 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)