Python SQLAlchemy没有这样的表格
我正在创建一个Flask应用程序,我有一个带有表单的页面来注册新用户。但是当我键入一些数据时,我得到了错误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
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。看起来问题在于导入语句中的输入错误!我们在这里学到的教训是:饥饿时千万不要编码