2017-01-24 7 views
2

bluprintで新しく、モデルファイルであるmydatabase.pyファイルにdbをインポートする際に問題があります。フラスコ - 青写真 - sqlalchemy - molesファイルに名前 'db'をインポートできません。

私は、このエラーに直面してきました:

ImportError: cannot import name 'db'

私のプロジェクトのツリー

nikoofar/ 
    run.py 
    bookshelf/ 
     __init__.py 
     mydatabase.py 
     main/ 
      controllers.py 
      __init__.py 

run.py

from bookshelf import app 

if __name__ == '__main__': 
    app.run(debug=True, port=8000) 

本棚/ INTITの.py

from flask import Flask 
from bookshelf.main.controllers import main 
from flask_sqlalchemy import SQLAlchemy 
from mydatabase import pmenu 


app = Flask(__name__, instance_relative_config=True) 
db = SQLAlchemy(app) 
db.init_app(app) 
application.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:[email protected]/databasename' 

app.config.from_object('config') 

app.register_blueprint(main, url_prefix='/') 

本棚/メイン/ controllers.py

from flask import Blueprint 
from bookshelf.mydatabase import * 
from flask_sqlalchemy import SQLAlchemy 


main = Blueprint('main', __name__) 


@main.route('/') 
def index(): 
    g = pmenu.query.all() 
    print (g) 
    return "ok" 

問題はfrom bookshelf import dbにバックアップし、私はそれを削除した場合、エラーに変更されます。

ImportError: cannot import name 'db'

本棚/ mydatabase.py

from bookshelf import db 

class pmenu(db.Model): 
    __tablename__ = 'p_menu' 
    id = db.Column(db.Integer, primary_key=True) 
    txt = db.Column(db.String(80), unique=True) 
    link = db.Column(db.String(1024)) 
    def __init__(self, txt, link): 
     self.txt = txt 
     self.link = link 
    def __repr__(self): 
     return "{'txt': " + self.txt + ", 'link':" + self.link + "}" 

答えて

9

これは実際にはシンプルで不満足な問題です。問題は、あなたのdb = SQLAlchemy(app)後にインポートを移動する場合は、あなたの__init__.py

dbのインスタンスを作成している主なBEFOREをインポートしている場合、それは動作します:

from flask import Flask 

from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://uername:[email protected]/test' 

db = SQLAlchemy(app) 

from bookshelf.main.controllers import main #<--move this here 

app.register_blueprint(main, url_prefix='/') 
+0

はい正しい:D問題が修正されており、私はそれを学んだ、ありがとう:) – niloofar

+0

私はコマンドプロンプトを使用してdbを作成しようとすると私はそれを修正します – omah94

+0

@ omah94私はあなたの詳細と適切なヘルプを取得するためのコードスニペットを投稿することをお勧めします。それがなければあなたの問題を特定することは難しいでしょう。 – CodeLikeBeaker

関連する問題