Python SQLAlchemy没有这样的表格

Python SQLAlchemy没有这样的表格,python,database,flask,sqlalchemy,flask-sqlalchemy,Python,Database,Flask,Sqlalchemy,Flask Sqlalchemy,我正在创建一个Flask应用程序,我有一个带有表单的页面来注册新用户。但是当我键入一些数据时,我得到了错误sqlalchemy.exc.OperationalError:(OperationalError)没有这样的表:user。在config.py文件中,我有一行 SQLALCHEMY\u数据库\u URI=”sqlite:///example.sqlite“以下是我的代码: flask_start.py import os from flask import Flask from confi

我正在创建一个Flask应用程序,我有一个带有表单的页面来注册新用户。但是当我键入一些数据时,我得到了错误
sqlalchemy.exc.OperationalError:(OperationalError)没有这样的表:user
。在config.py文件中,我有一行
SQLALCHEMY\u数据库\u URI=”sqlite:///example.sqlite“
以下是我的代码:

flask_start.py

import os
from flask import Flask
from config import Config
from flask_utils import page_bp
from db_creation import db


def create_app():
    appname = "IOT - PROJECT NASTIS"
    app = Flask(appname)
    myconfig = Config
    app.config.from_object(myconfig)
    app.register_blueprint(page_bp, url_prefix='')
    db.init_app(app)
    return app


def setup_database(app):
    with app.app_context():
        db.create_all()


if __name__ == "__main__":
    app = create_app()
    if not os.path.isfile('/tmp/test.sqlite'):
        setup_database(app)
    port = 8000
    interface = '0.0.0.0'
    app.run(host=interface, port=port, debug=True)
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
db_creation import db
from User import User

page_bp = Blueprint("page_bp", __name__)

@page_bp.route('/mainPage/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User(form.username.data, form.email.data,
                    sha256_crypt.encrypt(str(form.password.data)))
        db.session.add(user)
        db.session.commit()
        flash('Thanks for registering, you can now log in!!', 'success')
        return redirect(url_for('page_bp.register'))
    return render_template('register.html', form=form)
from db_creation import db


class User(db.Model):
    username = db.Column(db.String(100), primary_key=True)
    email = db.Column(db.String(100))
    password = db.Column(db.String(100))

    def __init__(self, username, email, password):
        self.username = username
        self.email = email
        self.password = password
db_creation.py

import os
from flask import Flask
from config import Config
from flask_utils import page_bp
from db_creation import db


def create_app():
    appname = "IOT - PROJECT NASTIS"
    app = Flask(appname)
    myconfig = Config
    app.config.from_object(myconfig)
    app.register_blueprint(page_bp, url_prefix='')
    db.init_app(app)
    return app


def setup_database(app):
    with app.app_context():
        db.create_all()


if __name__ == "__main__":
    app = create_app()
    if not os.path.isfile('/tmp/test.sqlite'):
        setup_database(app)
    port = 8000
    interface = '0.0.0.0'
    app.run(host=interface, port=port, debug=True)
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
db_creation import db
from User import User

page_bp = Blueprint("page_bp", __name__)

@page_bp.route('/mainPage/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User(form.username.data, form.email.data,
                    sha256_crypt.encrypt(str(form.password.data)))
        db.session.add(user)
        db.session.commit()
        flash('Thanks for registering, you can now log in!!', 'success')
        return redirect(url_for('page_bp.register'))
    return render_template('register.html', form=form)
from db_creation import db


class User(db.Model):
    username = db.Column(db.String(100), primary_key=True)
    email = db.Column(db.String(100))
    password = db.Column(db.String(100))

    def __init__(self, username, email, password):
        self.username = username
        self.email = email
        self.password = password
flask_utils.py

import os
from flask import Flask
from config import Config
from flask_utils import page_bp
from db_creation import db


def create_app():
    appname = "IOT - PROJECT NASTIS"
    app = Flask(appname)
    myconfig = Config
    app.config.from_object(myconfig)
    app.register_blueprint(page_bp, url_prefix='')
    db.init_app(app)
    return app


def setup_database(app):
    with app.app_context():
        db.create_all()


if __name__ == "__main__":
    app = create_app()
    if not os.path.isfile('/tmp/test.sqlite'):
        setup_database(app)
    port = 8000
    interface = '0.0.0.0'
    app.run(host=interface, port=port, debug=True)
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
db_creation import db
from User import User

page_bp = Blueprint("page_bp", __name__)

@page_bp.route('/mainPage/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User(form.username.data, form.email.data,
                    sha256_crypt.encrypt(str(form.password.data)))
        db.session.add(user)
        db.session.commit()
        flash('Thanks for registering, you can now log in!!', 'success')
        return redirect(url_for('page_bp.register'))
    return render_template('register.html', form=form)
from db_creation import db


class User(db.Model):
    username = db.Column(db.String(100), primary_key=True)
    email = db.Column(db.String(100))
    password = db.Column(db.String(100))

    def __init__(self, username, email, password):
        self.username = username
        self.email = email
        self.password = password
User.py

import os
from flask import Flask
from config import Config
from flask_utils import page_bp
from db_creation import db


def create_app():
    appname = "IOT - PROJECT NASTIS"
    app = Flask(appname)
    myconfig = Config
    app.config.from_object(myconfig)
    app.register_blueprint(page_bp, url_prefix='')
    db.init_app(app)
    return app


def setup_database(app):
    with app.app_context():
        db.create_all()


if __name__ == "__main__":
    app = create_app()
    if not os.path.isfile('/tmp/test.sqlite'):
        setup_database(app)
    port = 8000
    interface = '0.0.0.0'
    app.run(host=interface, port=port, debug=True)
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()
db_creation import db
from User import User

page_bp = Blueprint("page_bp", __name__)

@page_bp.route('/mainPage/register', methods=['GET', 'POST'])
def register():
    form = RegistrationForm(request.form)
    if request.method == 'POST' and form.validate():
        user = User(form.username.data, form.email.data,
                    sha256_crypt.encrypt(str(form.password.data)))
        db.session.add(user)
        db.session.commit()
        flash('Thanks for registering, you can now log in!!', 'success')
        return redirect(url_for('page_bp.register'))
    return render_template('register.html', form=form)
from db_creation import db


class User(db.Model):
    username = db.Column(db.String(100), primary_key=True)
    email = db.Column(db.String(100))
    password = db.Column(db.String(100))

    def __init__(self, username, email, password):
        self.username = username
        self.email = email
        self.password = password

我做错了什么?当运行db.create_all()时,我想不出错误是什么,它需要知道要创建哪些表--它可以判断当前可以看到哪些模型

User
没有导入到您的
start\u flask.py
文件中——因此当运行
db.create\u all()
时,它几乎会运行“嗯,我不知道有什么模型,我想我只会创建一个没有表的空数据库”,它不知道去查看其他文件,所以您只需要介绍它们:)

将用户导入用户中的
添加到
start\u flask.py
文件中的导入应该可以解决这个问题


另外--您正在检查
/tmp/…
中的文件以触发“还没有数据库文件”检查,但是您的
SQLALCHEMY\u数据库URI
与此不匹配。

当您运行
db.create\u all()
时,它需要知道要创建哪些表--它可以告诉您当前可以看到哪些模型

User
没有导入到您的
start\u flask.py
文件中——因此当运行
db.create\u all()
时,它几乎会运行“嗯,我不知道有什么模型,我想我只会创建一个没有表的空数据库”,它不知道去查看其他文件,所以您只需要介绍它们:)

将用户导入用户中的
添加到
start\u flask.py
文件中的导入应该可以解决这个问题


另外--您正在检查
/tmp/…
中的文件以触发“还没有数据库文件”检查,但您的
SQLALCHEMY\u database\u URI
与此不匹配。

如果导入用户,我会得到
SQLALCHEMY.exc.InvalidRequestError:表“User”已为此元数据实例定义。指定“extend_existing=True”以重新定义现有表对象上的选项和列。
…这意味着什么?你说得很对!导入
flask\u utils
时,我错过了
User
获得的信息。否则代码看起来没问题。刚刚运行了一个简化版本()并创建了db。看起来问题在于导入语句中的输入错误!我们在这里学到的教训是:如果我导入用户我得到
sqlalchemy.exc.InvalidRequestError:表“User”已为此元数据实例定义。指定“extend_existing=True”以重新定义现有表对象上的选项和列。
…这意味着什么?你说得很对!导入
flask\u utils
时,我错过了
User
获得的信息。否则代码看起来没问题。刚刚运行了一个简化版本()并创建了db。看起来问题在于导入语句中的输入错误!我们在这里学到的教训是:饥饿时千万不要编码