当我在类中继承sqlalchemy(flask app)时,它不识别Column()之类的函数

2024-04-26 05:49:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在借助此视频构建一个Flask应用程序: https://www.youtube.com/watch?v=dam0GPOAvVI&t=3256s

以下是迄今为止我的init文件:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path

DB_NAME = "database.db"
db = SQLAlchemy()

app = Flask(__name__)
app.config['SECRET_KEY'] = 'bindthemostselling'
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
db.init_app(app)
    
from views import views
from auth import auth
    
app.register_blueprint(views, url_prefix='/')
app.register_blueprint(auth, url_prefix='/')


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

这是我的模型文件,到目前为止,它只是一个类:

from flask_login import UserMixin
from . import db

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(150), unique=True)
    password = db.Column(db.String(150))
    first_name = db.Column(db.String(150))

我的问题是User类中的db.Column无法识别。我尝试重新安装sqlalchemy和flask,我再次查看了他所做的一切,甚至从他的github复制了代码,但它仍然无法识别该函数,甚至我从视频中注意到的其他函数。这是我第一次尝试制作一个真正的python应用程序,所以语法中可能缺少一些东西

提前谢谢

编辑

因此,我更新了init文件,以包含所有内容,这样我可以运行并查看我在这里得到的错误是我现在遇到的错误:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path
from models import User
from flask_login import LoginManager


DB_NAME = "database.db"
db = SQLAlchemy()

app = Flask(__name__)
app.config['SECRET_KEY'] = 'bindthemostselling'
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
db.init_app(app)
    
from views import views
from auth import auth
    
app.register_blueprint(views, url_prefix='/')
app.register_blueprint(auth, url_prefix='/')

login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)

@login_manager.user_loader
def load_user(id):
    return User.query.get(int(id))

def create_database(app):
    if not path.exists('.' + DB_NAME):
        db.create_all(app=app)
        print('Created Database!')

create_database(app)

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


这是我得到的回溯(如果格式不好,很抱歉):

回溯(最近一次呼叫最后一次):
文件“c:\Users\Ashraf\FlaskToDo_uem>inituu.py”,第4行,在 从模型导入用户
文件“c:\Users\Ashraf\FlaskToDo\models.py”,第2行,在 从…起导入数据库
ImportError:尝试在没有已知父包的情况下进行相对导入

很明显,数据库没有正确导入?这不可能是真的,因为当我创建用户类并传递db.Model时,它识别了它。我到底错过了什么


1条回答
网友
1楼 · 发布于 2024-04-26 05:49:37

尝试从更改模型文件中的导入语句

from . import db

致:

from init import db

这样,您应该会得到一个循环导入错误,所以在定义db之后在init中移动from models import User

这是完整的设置:

初始化:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path

from flask_login import LoginManager


DB_NAME = "database.db"
db = SQLAlchemy()

app = Flask(__name__)
app.config['SECRET_KEY'] = 'bindthemostselling'
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
db.init_app(app)

login_manager = LoginManager()
login_manager.login_view = 'auth.login'
login_manager.init_app(app)

@login_manager.user_loader
def load_user(id):
    return User.query.get(int(id))

def create_database(app):
    if not path.exists('.' + DB_NAME):
        db.create_all(app=app)
        print('Created Database!')

create_database(app)

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

from models import User

型号:

from flask_login import UserMixin
from init import db

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(150), unique=True)
    password = db.Column(db.String(150))
    first_name = db.Column(db.String(150))

编辑:

添加要在应用程序中实际导航的路线:

@app.route("/")
def home():
    return "Hello World"

相关问题 更多 >