Flask为什么说我的表未定义?

时间:2019-08-17 17:46:58

标签: python flask flask-sqlalchemy

我已经用Flask-Sql-Alchemy创建了一个flask应用程序,但是flask无法识别我创建的数据库表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'))

manage.py

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

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

1 个答案:

答案 0 :(得分:0)

这不是在谈论您的表,而是在谈论名称User_Plans,实际上您的主代码中并未定义该名称。您需要将它以及您使用的任何其他模型导入该文件。

from models import User_Plans