我正在尝试导入数据库并收到错误“无法导入名称'db'”。我已经看到了有关此类问题的答案,但对我而言,这些答案都没有帮助。 我的项目树:
chat
| chat.py
└─ app
│ models.py
│ __init__.py
│
├─── main
│ events.py
│ forms.py
│ routes.py
│ __init__.py
chat.py:
from app import create_app, socketio
app = create_app(debug=True)
if __name__ == '__main__':
socketio.run(app)
app \ init.py:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_socketio import SocketIO
socketio = SocketIO()
def create_app(debug=False):
app = Flask(__name__)
app.debug = debug
app.config['SECRET_KEY'] = 'gjr39dkjn344_!67#'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql:///site.db'
db = SQLAlchemy(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
socketio.init_app(app)
return app
app \ main \ init.py:
from flask import Blueprint
main = Blueprint('main', __name__)
from . import routes, events
app \ models.py:
from app import db
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), nullable=False)
session_id = db.Column(db.String(200), nullable=False)
isready = db.Column(db.Boolean, default='False')
room = db.relationship('Room', backref='spy')
def __repr__(self):
return f"User('{self.username}')"
因此,当我在python终端中尝试from app import db
时,我会得到
ImportError:无法导入名称“ db”
由于我是不熟悉Flask(和Web的人),所以我不知道该怎么办。我已经尝试过this solution(最接近我的情况),并且都给出了类似的答案,但是没有用。 我可以尝试什么?
答案 0 :(得分:0)
db
只是create_app()
函数中的局部变量。您需要在create_app()
工厂的外部对象中创建该对象。
您可以创建Flask-SQLAlchemy db
插件对象,而无需传入app
参数,并在工厂中将该对象连接到Flask app
使用.init_app()
方法,就像您对Flask-SocketIO插件所做的一样:
db = SQLAlchemy()
def create_app(debug=False):
app = Flask(__name__)
app.debug = debug
app.config['SECRET_KEY'] = 'gjr39dkjn344_!67#'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql:///site.db'
db.init_app(app)
socketio.init_app(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
现在db
在模块中可以作为全局变量使用,因此可以在其他位置导入。