【问题标题】:SQLAlchemy not creating table in databaseSQLAlchemy 不在数据库中创建表
【发布时间】: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


【解决方案1】:

嘿,你发现了吗?遇到类似的问题。谢谢

【讨论】:

  • 这篇文章看起来不像是试图回答这个问题。这里的每一篇文章都应该明确地尝试回答这个问题;如果您有批评或需要澄清问题或其他答案,您可以在其下方直接post a comment(如这个)。请删除此答案并创建评论或新问题。见:Ask questions, get answers, no distractions
猜你喜欢
  • 2014-05-17
  • 2023-01-29
  • 2015-06-06
  • 2017-02-25
  • 2020-12-21
  • 2019-02-22
  • 2019-07-10
  • 1970-01-01
相关资源
最近更新 更多