SQLAlchemy OperationalError 没有这样的 table
SQLAlchemy OperationalError no such table
我正在创建一个 Flask 应用程序,并且我有一个包含用于注册新用户的表单的页面。但是当我输入一些数据时,我得到错误 sqlalchemy.exc.OperationalError: (OperationalError) no such table: user
。在文件 config.py 我有这一行
SQLALCHEMY_DATABASE_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)
db_creation.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
flask_utils.py
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)
User.py
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_flask.py
文件中——所以当 db.create_all()
是 运行 时,它几乎是‘嗯,我不知道任何模型,我想我只是创建一个没有表的空数据库'它不知道去查看其他文件,所以你只需要介绍它们:)
将 from User import User
添加到 start_flask.py
文件中的导入应该可以解决这个问题。
另外--您正在检查 /tmp/...
中的文件以触发您的 'no database file yet' 检查,但您的 SQLALCHEMY_DATABASE_URI
不匹配。
我正在创建一个 Flask 应用程序,并且我有一个包含用于注册新用户的表单的页面。但是当我输入一些数据时,我得到错误 sqlalchemy.exc.OperationalError: (OperationalError) no such table: user
。在文件 config.py 我有这一行
SQLALCHEMY_DATABASE_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)
db_creation.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
flask_utils.py
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)
User.py
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_flask.py
文件中——所以当 db.create_all()
是 运行 时,它几乎是‘嗯,我不知道任何模型,我想我只是创建一个没有表的空数据库'它不知道去查看其他文件,所以你只需要介绍它们:)
将 from User import User
添加到 start_flask.py
文件中的导入应该可以解决这个问题。
另外--您正在检查 /tmp/...
中的文件以触发您的 'no database file yet' 检查,但您的 SQLALCHEMY_DATABASE_URI
不匹配。