【问题标题】:Why is Flask saying that my table is undefined?为什么 Flask 说我的表未定义?
【发布时间】:2019-08-17 17:46:58
【问题描述】:

我已经使用 Flask-Sql-Alchemy 创建了一个烧瓶应用程序,但是烧瓶无法识别我创建并尝试查询的数据库表 User_Plans。

它给出了以下错误:

NameError:未定义名称“User_Plans”。

我可能是错的,但感觉错误是一个范围问题。

我在下面包含了我的代码。

你能帮忙吗?非常感谢。

database.py

from flask_sqlalchemy import SQLAlchemy
from flask_user import UserManager, UserMixin, SQLAlchemyAdapter
from datetime import datetime

def create_db(app):

    db = SQLAlchemy(app)

    class User(db.Model, UserMixin):
        id=db.Column(db.Integer,primary_key=True)
        username = db.Column(db.String(50),nullable=False,unique=True)
        password = db.Column(db.String(255),nullable=False, server_default='')
        active=db.Column(db.Boolean(),nullable=False,server_default='0')
        email = db.Column(db.String(255),nullable=False,unique=True)
        confirmed_at = db.Column(db.DateTime())
        plan_id=db.Column(db.Integer, db.ForeignKey('plans.id'),default=1)


    db_adapter = SQLAlchemyAdapter(db,User)
    user_manager = UserManager(db_adapter,app)

    class User_Plans(db.Model):
        id=db.Column(db.Integer,primary_key=True)
        user_id=db.Column(db.Integer, db.ForeignKey('user.id'))
        plan_id=db.Column(db.Integer, db.ForeignKey('plans.id'))
        start_date = db.Column(db.DateTime())
    class User_APIs(db.Model):
        id=db.Column(db.Integer,primary_key=True)
        user_id=db.Column(db.Integer, db.ForeignKey('user.id'))
        api_id=db.Column(db.Integer, db.ForeignKey('tools.id'))
        api_key=db.Column(db.String(50),nullable=False,unique=True)

    class Tools(db.Model):
        id=db.Column(db.Integer,primary_key=True)
        tool=db.Column(db.String(50),nullable=False,unique=True)

    class Plans(db.Model):
        id=db.Column(db.Integer,primary_key=True)
        plan=db.Column(db.String(50),nullable=False,unique=True)
        price=db.Column(db.Float(5),nullable=False)
        credit=db.Column(db.Integer,nullable=False)       

    class Usage(db.Model):
        id=db.Column(db.Integer,primary_key=True)
        user_id=db.Column(db.Integer, db.ForeignKey('user.id'))
        task_id=db.Column(db.Integer, db.ForeignKey('tasks.id'))
        datetime=db.Column(db.DateTime())

    class Tasks(db.Model):
        id=db.Column(db.Integer,primary_key=True)
        task=db.Column(db.String(50),nullable=False,unique=True)
        credit=db.Column(db.Integer,nullable=False)

    class Status(db.Model):
        id=db.Column(db.Integer,primary_key=True)
        status=db.Column(db.String(20),nullable=False,unique=True)

__init__.py

from flask import Flask
from flask import render_template

from flask_mail import Mail
from config import config
from database import create_db
from flask_user import login_required, current_user
from dateutil.relativedelta import relativedelta
from datetime import datetime

def create_app(config_name):
    print(config_name)
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    create_db(app)
    mail = Mail(app)


    @app.route('/')
    @login_required
    def index():
        user_id = current_user.id
        start_date=User_Plans.query.with_entities(User_Plans.start_date).filter(User_Plans.user_id==user_id).first()
        return '<h1>Hello {}, you started your plan on {}</h1>'.format(current_user.username,start_date.strftime('%d-%m-%Y'))

ma​​nage.py

from app import create_app
app = create_app('development')

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

【问题讨论】:

    标签: python flask flask-sqlalchemy


    【解决方案1】:

    这不是在谈论您的桌子,而是在谈论名称User_Plans,它确实没有在您的主代码中定义。您需要将它以及您使用的任何其他模型导入到该文件中。

    from models import User_Plans
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2012-09-30
      相关资源
      最近更新 更多