【发布时间】:2022-06-22 07:39:13
【问题描述】:
我正在使用带有注册表单的烧瓶创建一个网站,该注册表单将注册信息保存在数据库中。但是,它没有在数据库中创建任何表。 我的 init.py 文件如下所示:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from os import path
#intitialising databas: works correctly
db = SQLAlchemy()
DB_NAME = 'database.db'
def create_app():
app = Flask(__name__)
app.config['SECRET_KEY'] = 'shhh dont tell'
app.config['SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{DB_NAME}'
db.init_app(app)
#importing our blue prints
from .views import views
from .auth import auth
app.register_blueprint(views,urlprefix='/')
app.register_blueprint(auth,urlprefix='/')
from .models import User
create_database(app)
return app
#database creates successfully
def create_database(app):
if not path.exists('website/source' + DB_NAME):
db.create_all(app=app)
print('Created Database')
我的 models.py 看起来像:
from enum import unique
from sqlalchemy import true
from website.source import db
from flask_login import UserMixin
#schema of table according to mega tut and sqlalchemy
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
firstName = db.Column(db.String(150))
lastName = db.Column(db.String(150))
userName = db.Column(db.String(150), unique=True)
password = db.Column(db.String(150))
我不确定为什么会这样。当我在烧瓶上运行应用程序并填写注册表单并单击提交按钮时出现错误
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) 表用户没有名为 userName 的列
我查看了多个 youtube 教程,我似乎做的一切都是正确的。任何帮助将不胜感激
谢谢
【问题讨论】:
-
if not path.exists('website/source' + DB_NAME)- 也许你先创建了一个空数据库然后你正在重用它? -
自最初创建数据库以来,您是否在模型上更改或添加了
userName属性?错误消息暗示找到了表,但没有找到列。 -
@Peter 我只是在检查我没有覆盖数据库。但是我打开了数据库,里面没有表格
-
@snakecharmerb 谢谢!我现在明白了这个问题。如何在烧瓶中放一张桌子?
-
我不确定烧瓶本身是否有简单的方法;你可以运行
db.drop_all(),这将删除所有表,或者只是删除当前的SQLite文件。如果你的机器安装了SQLite CLI可执行文件(sqlite3(linux),sqlite3.exe(windows )) 你可以用它来删除表格。
标签: python sql flask flask-sqlalchemy flask-login