gpt4 book ai didi

python - 为什么我一直收到 'ImportError: cannot import name db' ?

转载 作者:行者123 更新时间:2023-12-05 08:54:42 24 4
gpt4 key购买 nike

我正在学习本教程:getting started with flask-login .

但是我卡在了第 5 步,我开始使用 SQLAlchemy。根据我所阅读的内容,我相信问题可能是循环导入,但我对 Python 编码还是有点陌生​​。这个网络应用程序是我在空闲时间做的一个小项目。

所以我想我的总体问题是,这是循环导入吗?如果不是,有人能看出我这里可能做错了什么吗?我也在使用 Python 2.7 使用 virtualenv 运行它。

文件结构:

-noteapp
-noteapp
-db
-forms
-static
-templates
-views
__init__.py
app.py
models.py

这是我的app.py文件

from flask import Flask
from flask_login import LoginManager
from noteapp.models import db

from noteapp.views.index import bp as index_bp
from noteapp.views.createnote import bp as createnote_bp
from noteapp.views.signup import bp as signup_bp

def init_db():
db.init_app(app)
db.app = app
db.create_all()

app = Flask(__name__)

app.secret_key = 'removed for reasons'
app.config['SQLALCHEMY_DATABASE_URI'] = 'removed for reasons'
db = SQLAlchemy(app)

login_manager = LoginManager(app)
login_manager.init_app(app)

app.register_blueprint(index_bp)
app.register_blueprint(createnote_bp)
app.register_blueprint(signup_bp)

if __name__ == '__main__':
app.init_db()
app.run(debug=True)

这是我的 models.py 文件:

from noteapp.app import app
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy(app)

class User(db.Model):
email = db.Column(db.String(80), primary_key=True, unique=True)
password = db.Column(db.String(80))
def __init__(self, email, password):
self.email = email
self.password = password
def __repr__(self):
return '<User %r>' % self.email

最佳答案

你是对的,你有一个圈子导入问题。

app.py 你导入 from noteapp.models import db,
models.py 导入 from noteapp.app import app

快速修复可能是:在 models.py 中使用 db = SQLAlchemy() 而没有 app
app.py 模块中,从 models.py 导入 db 并执行 db.init_app(app)

同时从你的 app.py 中移除 db = SQLAlchemy(app)

你的 app.py 应该是这样的..

from noteapp.models import db
...
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'removed for reasons'
...
def init_db():
db.init_app(app)
db.app = app
db.create_all()
...
if __name__ == '__main__':
app.init_db()
app.run(debug=True)

models.py 应该是这样的:

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
email = db.Column(db.String(80), primary_key=True, unique=True)
password = db.Column(db.String(80))
def __init__(self, email, password):
self.email = email
self.password = password
def __repr__(self):
return '<User %r>' % self.email

关于python - 为什么我一直收到 'ImportError: cannot import name db' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48762191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com