2016-04-15 6 views
-1

をここにチュートリアルを実行しようとすると:http://flask-sqlalchemy.pocoo.org/2.1/quickstart/私のアプリsql-alchemyチュートリアルの手順を実行しようとしています。コンソールから(はImportErrorを:名「デシベル」をインポートすることはできません)DBをインポートすることはできません

を使用して、私は円形の輸入の問題を見てきましたが、私はそれはそれはないと思います。私はPythonとフラスコ(とsqlalchemy)の絶対初心者です。私のアプリは、現在実行されますが、データベースの一部は、これは現在の設定ではありません

ん:

mysite 
|- __init__.py 
|- flask_app.py 
|- models.py 
|- views.py 

のinitの.py

from flask import Flask 
app = Flask(__name__) 

flask_app.py

from flask import Flask, request, url_for 
import random 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql:// -- database uri --' 
... app continues here 

models.py

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

db = SQLAlchemy(app) 

class Foo(db.Model): 
... model continues here 

views.py

from app import app,models 

... views continue here, still not using anything from models 

私はPythonのコンソールでfrom mysite import dbを実行したときに私が取得:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: cannot import name 'db' 

答えて

1

__init__.pyであなたのdbオブジェクトを宣言します。 __init__.pyで宣言されているものは、のmysite/にインポートできるものを定義します。

参照:What is __init__.py for?

はまた、アプリケーションファクトリパターンへの移行を検討してください。例えば

__init__.py に:

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 

db = SQLAlchemy() 

def create_app(): 
    app = Flask(__name__) 
    app.config['DEBUG'] = True 
    ... more application config ... 

    db.init_app(app) 

    return app 

その後 flask_app.py 中:

from mysite import create_app, db 

app = create_app() 

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

あなたはコード内で二回appオブジェクトをインスタンス化するので、私はこれを指摘します示された。どちらが間違っているのか

+0

ありがとうございます!それはそれを解決し、コンソールでDBをインポートさせてください SQLAlchemyは引数としてアプリを必要としませんか?アプリはまだ動作していますが、私はまだデータベースを使用することに回っていません。 –

+0

私の間違い、私は何か重要なことを忘れてしまった。 'db.init_app(app)' Flask-SQLAlchemyの 'app'インスタンスを設定します。 – wgwz

関連する問題