【问题标题】:flask - blueprint - sqlalchemy - cannot import name 'db' into moles file烧瓶-蓝图-sqlalchemy-无法将名称“db”导入摩尔文件
【发布时间】:2017-06-09 06:47:14
【问题描述】:

我是 bluprint 的新手,在将 db 导入 mydatabase.py 文件(即模型文件)时遇到问题。

我遇到了这个错误:

ImportError: 无法导入名称 'db'

我的项目树

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

运行.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:password@localhost/databasename'

app.config.from_object('config')

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

书架/main/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: 无法导入名称 '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 + "}"

有什么办法吗?

【问题讨论】:

    标签: python flask import sqlalchemy blueprint


    【解决方案1】:

    这实际上是一个简单但令人沮丧的问题。问题是您正在导入主要 BEFORE 您正在 __init__.py 中创建 db 的实例

    如果将导入移动到您的db = SQLAlchemy(app) 之后,它将起作用:

    from flask import Flask
    
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://uername:password@localhost/test'
    
    db = SQLAlchemy(app)
    
    from bookshelf.main.controllers import main #<--move this here
    
    app.register_blueprint(main, url_prefix='/')
    

    【讨论】:

    • 是的,正确 :D 问题已解决,我已经学会了,谢谢 :)
    • 如果我尝试使用命令提示符创建数据库,我该如何解决这个问题
    • 天哪,谢谢,我已经用头撞了好几个小时了。
    • 非常感谢,尤其是“但令人沮丧”的部分——真的让药丸变甜了(不是讽刺)
    • 我自己为此苦苦挣扎了好几个小时:(
    猜你喜欢
    • 2018-09-16
    • 2018-12-31
    • 2018-09-12
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    相关资源
    最近更新 更多