sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的表

2023-12-28

我定义了表名users_table并运行db.create_all()创建表,但在提交更新用户信息时出现错误“no such table user_table”。

我如何测试:

(under /project) python3 manage.py shell
>>> u = User(email='[email protected] /cdn-cgi/l/email-protection', username='foobar', password='player')
>>> db.create_all()
>>> db.session.add(u)
>>> db.session.commit()  # with following error message
Traceback (most recent call last):
  File "C:\...\Python\Python36-32\lib\site-packages\sqlalchemy\engine\base.py", line 1182, in _execute_context
  context)
  File "C:\...\Python\Python36-32\lib\site-packages\sqlalchemy\engine\default.py", line 470, in do_execute
  cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: users_table
...
...
  sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users_table

/project/app/__init__.py:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config

db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    db.init_app(app)
    return app

/project/app/models.py:

import os
from flask_sqlalchemy import SQLAlchemy
from werkzeug.security import generate_password_hash
from flask import Flask

basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQLAlchemy(app)

class User(db.Model):
    __tablename__ = 'users_table'
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(64), unique=True, index=True)
    username = db.Column(db.String(64), unique=True, index=True)
    password_hash = db.Column(db.String(128))

    def __repr__(self):
        return '<User %r>' % self.username

    @property
    def password(self):
        raise AttributeError('Password is not a readable attribute')

    @password.setter
    def password(self, password):
        self.password_hash = generate_password_hash(password)

项目/config.py:

import os
basedir = os.path.abspath(os.path.dirname(\__file__))

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'fhuaioe7832of67^&*T#oy93'
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True

    @staticmethod
    def init_app(app):
        pass

class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data.sqlite')

config = {
    'development': DevelopmentConfig,
    'default': DevelopmentConfig,
}

项目/管理.py:

import os
from app import create_app, db
from app.models import User
from flask_script import Manager, Shell

app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)

def make_shell_context():
    return dict(app=app, db=db, User=User)

manager.add_command("shell", Shell(make_context=make_shell_context))

if __name__ == '__main__':
    manager.run()

我刚刚完成 Flask 应用程序的设置,并处理了此类问题。

我强烈怀疑这里的问题是db您正在创建的__init__.py不知道内容models.py, 包括User班级。这db对象在__init__.py是一个完全独立的对象db你正在创建models.py。所以当你跑步时db.create_all() in __init__.py,它正在检查它所知道的表列表,但没有找到任何表。我遇到了这个问题。

我发现模型(比如User)已在特定的db模型类定义中列出的对象(例如class User(db.Model):).

所以基本上我的理解是解决这个问题的方法是运行db.create_all()使用相同的实例db用于定义模型。换句话说,运行db.create_all()从内部models.py.

这是我的代码,您可以看到我是如何设置的:

app.py:

#!flask/bin/python
import os

from flask import Flask


class CustomFlask(Flask):
    jinja_options = Flask.jinja_options.copy()
    jinja_options.update(dict(
        variable_start_string='%%',  # Default is '{{', I'm changing this because Vue.js uses '{{' / '}}'
        variable_end_string='%%',
    ))
app = CustomFlask(__name__)

app.config['SECRET_KEY'] = 'hard to guess string'

import yaml
if os.environ['SERVER_ENVIRONMENT'] == 'PRODUCTION':
    config_filename = "production.yaml"
elif os.environ['SERVER_ENVIRONMENT'] == 'LOCAL':
    config_filename = "local.yaml"
else:
    config_filename = "local.yaml"

base_directory = path = os.path.dirname(os.path.realpath(__file__))

with open(base_directory + "/config/" + config_filename) as config_file:
    config = yaml.load(config_file)

db_config = config['database']
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
    username=db_config['username'],
    password=db_config['password'],
    hostname=db_config['hostname'],
    databasename=db_config['databasename'],
)
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
db.app = app


def clear_the_template_cache():
    app.jinja_env.cache = {}

app.before_request(clear_the_template_cache)

from flask_login import LoginManager
login_manager = LoginManager()
login_manager.init_app(app)


@login_manager.user_loader
def load_user(email):
    from models import User
    return User.query.filter_by(email=email).first()


if __name__ == '__main__':
    from routes import web_routes
    app.register_blueprint(web_routes)

    from api import api
    app.register_blueprint(api)

    # To get PyCharm's debugger to work, you need to have "debug=False, threaded=True"
    #app.run(debug=False, threaded=True)
    app.run(debug=True)

models.py:

from app import db

import datetime
from werkzeug.security import generate_password_hash, \
     check_password_hash


class Song(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(80))
    datetime_created = db.Column(db.DateTime, default=datetime.datetime.utcnow())
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    lines = db.relationship('Line', cascade="all,delete", backref=db.backref('song', lazy='joined'), lazy='dynamic')
    is_deleted = db.Column(db.Boolean, default=False)


class Line(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    song_id = db.Column(db.Integer, db.ForeignKey('song.id'))
    spans_of_time = db.relationship('SpanOfTime', cascade="all,delete", backref=db.backref('line', lazy='joined'), lazy='dynamic')


class SpanOfTime(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    line_id = db.Column(db.Integer, db.ForeignKey('line.id'))
    starting_64th = db.Column(db.Integer)  # I'm assuming the highest-granularity desired will be a 1/64th note-length.
    length = db.Column(db.Integer)  # I guess this'll be in 1/64th notes, so a 1/16th note will be '4'.
    content = db.Column(db.String(80))


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    email = db.Column(db.String(80), primary_key=True, unique=True)
    display_name = db.Column(db.String(80), default="A Rhymecraft User")
    password_hash = db.Column(db.String(200))
    datetime_subscription_valid_until = db.Column(db.DateTime, default=datetime.datetime.utcnow() - datetime.timedelta(days=1))
    datetime_joined = db.Column(db.DateTime, default=datetime.datetime.utcnow())
    songs = db.relationship('Song', cascade="all,delete", backref=db.backref('user', lazy='joined'), lazy='dynamic')

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

    def __repr__(self):
        return '<User %r>' % self.email

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return str(self.email)


def init_db():
    db.create_all()

    # Create a test user
    new_user = User('[email protected] /cdn-cgi/l/email-protection', 'aaaaaaaa')
    new_user.display_name = 'Nathan'
    db.session.add(new_user)
    db.session.commit()

    new_user.datetime_subscription_valid_until = datetime.datetime(2019, 1, 1)
    db.session.commit()


if __name__ == '__main__':
    init_db()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的表 的相关文章

  • 使用正则表达式标记化进行 NLP 词干提取和词形还原

    定义一个函数 名为performStemAndLemma 它需要一个参数 第一个参数 textcontent 是一个字符串 编辑器中给出了函数定义代码存根 执行以下指定任务 1 对给出的所有单词进行分词textcontent 该单词应包含字
  • Flask.cli.NoAppException:导入“app”时,引发了 ImportError:

    1 我正在尝试构建一个flask项目并尝试将类导入到models py中并将路由导入到app py中 当我尝试运行该项目时 它显示了一些错误 这是回溯的信息 Traceback most recent call last File User
  • 如何使用 .schema 文件在 sqlite3 中创建 DB 文件

    我们的客户向我们提供了一个名为db schema 现在有一个命令可以用来运行这个文件来创建一个 dbsqlite3 中的文件 我可以做到这一点而不必输入中提到的所有查询吗db schema file 请帮忙 谢谢 如果该文件仅包含格式正确的
  • 如何测量异步发电机所花费的时间?

    我想测量生成器花费的时间 阻塞主循环的时间 假设我有以下两个生成器 async def run for i in range 5 await asyncio sleep 0 2 yield i return async def walk f
  • Python 3.7 Windows 不支持 dbm.gnu 吗?

    做的时候 import dbm gnu 在适用于 Windows 的标准 Python 3 7 6 64 上 我得到 文件 C Python37 lib dbm gnu py 第 3 行 位于从 gdbm 导入 ModuleNotFound
  • Python:球体的交集

    我对编程非常陌生 但我决定承担一个有趣的项目 因为我最近学会了如何以参数形式表示球体 当三个球体相交时 有两个不同的交点 除非它们仅在一个奇点处重叠 球体的参数表示 我的代码是根据答案修改的Python matplotlib 绘制 3d 立
  • AttributeError:“MainRouter”对象没有属性“_disabled_count”

    我正在创建一个 kivy 应用程序 其中我使用了显示此错误的路由器 AttributeError MainRouter 对象没有属性 disabled count 有什么解决办法吗 我也得到了这个 但使用 super 修复了它 使用以下命令
  • Mac OS X 10.9 上的 Python3、lxml 和“未找到符号:_lzma_auto_decoder”

    我已经使用 homebrew 安装了 python 3 然后安装了 pip3 和 lxml 下面一行 从 lxml 导入主菜 导致以下错误 python3 Python 3 3 5 v3 3 5 62cf4e77f785 Mar 9 201
  • sklearn pipeline + keras顺序模型-如何获取历史记录?

    Keras https keras io模型 当 fit被调用时 返回一个历史对象 如果我将此模型用作 sklearn 管道的一步 是否可以检索它 顺便说一句 我正在使用 python 3 6 提前致谢 History 回调记录每个时期的训
  • 两列上的唯一索引是否意味着每一列上都有一个索引?

    我的架构中有一个表 它对两列有唯一约束 UNIQUE Column1 Column2 SQlite 文档告诉我 这在这些列上创建唯一索引 http www sqlite org lang createtable html 我的问题是 这是否
  • 错误:环境 /Users/myuser/.virtualenvs/iron 不包含激活脚本

    我正在 macOS Catalina 版本 10 15 1 上运行 python 3 7 6 并且我正在尝试安装和设置virtualenvwrapper我已经安装了pip3 install virtualenvwrapper 我的 bash
  • Flask:缓存静态文件(.js、.css)

    我真的找不到任何这方面的资源 那么如何将视图 函数的缓存与静态文件 即 css js 分开 我想将静态对象缓存一周 另一方面 我只需要缓存函数 视图几分钟 当我执行以下操作时 from flask ext cache import Cach
  • 如何更改 PyGame 中声音或音乐的音量?

    如何更改 PyGame 中的音量 例如通过设置更改音量 我制作了 UI 元素 只需要知道如何更改音量即可 我知道我说不清楚 但你可以理解我 请帮忙 更改音量取决于您是否正在播放pygame mixer Sound https www pyg
  • 多行 x 刻度标签

    我正在尝试制作类似于此 Excel 示例的图 我想知道 x 刻度标签上是否有第二层 例如 5 年统计摘要 我知道我可以使用制作多行刻度标签 n但我希望能够独立地转换这两个级别 这很接近 fig plt figure figsize 8 4
  • Sqlite 删除速度极其慢 - 如何加快速度?

    我读到删除操作很慢 我想知道如何改进此检查 我有一个每天填充 10 15k 行的表 每次启动时我都需要清理所有超过 6 个月的记录 但是当数据库增长时 我开始遇到速度问题 当我运行此命令时 有接近 100 万条记录 即使我没有任何内容要删除
  • 在 Python 3 中动态导入模块的问题

    我遇到的情况是 在我的 Python 3 项目中 在运行时必须包含某些模块 我在用着importlib import module为了这 第二次更新 我确实找到了一种方法来做一些接近我想要的事情 一些额外的代码可能会使我的一些链接稍微偏离一
  • 如何使用python读取最后一行的特定位置

    我有一个太大的 txt 文件 并且有几行类似的行 如下所示 字1 字2 字3 字4 553 75 我对位置 4 值 感兴趣 即最后一行 553 75 我的文件文本 word1 word2 word3 word4 553 20 word1 w
  • Flask SQLAlchemy 与 MyPy - 模型类型错误

    我遇到了以下组合问题flask sqlalchemy and mypy 当我定义一个新的 ORM 对象时 例如 class Foo db Model pass where db是使用创建的数据库SQL炼金术应用于flask app mypy
  • 对数据框的行进行排序

    我有以下数据框 adjusted RFC df Node Feature Indicator Scaled Class Direction True False 0 0 km lt 0 181 class 4 0 gt 1 NA 125 1
  • 从 C 线程调用 Python 代码

    我对从 C 或 C 线程调用 Python 代码时如何确保线程安全感到非常困惑 The Python 文档 http docs python org c api init html non python created threads似乎是

随机推荐

  • Mongoid分页

    I tried posts Post page params page per page 10 and posts Post paginate page gt 1 per page gt 10 但这两种方法都行不通 undefined me
  • 如何在模板助手中使用 Meteor 方法

    如何定义一个可以在模板助手中调用的 Meteor 方法 我有这两个文件 文件 lib test js Meteor methods viewTest function str return str 文件 客户端 myView js Temp
  • 未找到代理 JAR 或没有代理类属性

    已修复 这不是代码导致的错误 这是因为 IDE 我只是尝试为一款名为 Minecraft 的游戏进行注入 但我有一个问题 无法加载代理 这是例外情况 Exception in thread main com sun tools attach
  • 检测父进程何时退出

    我将有一个用于处理网络服务器重新启动的父进程 它将向子级发出信号以停止侦听新请求 子级将向父级发出信号以表明其已停止侦听 然后父级将向新子级发出信号以表明其可以开始侦听 通过这种方式 我们可以实现该级别重新启动的停机时间少于 100 毫秒
  • 文件夹中的新文件事件

    有人可以帮助我了解如何构建一个 24 7 运行的软件来侦听特定文件夹 例如 C Actions 并且每次我在该文件夹中放置一个新文件时 该软件都需要读取和处理它 如果文件夹中没有文件 软件不应只等待下一个文件的到来而什么也不做 文件 act
  • ASP.NET 动态控件计数(随时创建控件)

    我正在尝试创建一个复合 ASP NET 控件 让您可以构建可编辑的控件集合 我的问题是 当我按下添加或回发按钮 除了回发表单之外什么也不做 时 在文本框中输入的任何值都会丢失 当控件数量在回发之间发生变化时 我无法让它工作 我基本上需要能够
  • 理论计算机科学主题是否具有“现实世界”的开发应用?

    我所说的 理论计算机科学主题 指的是常规语言与非常规语言 泵引理和语法等内容 我熟悉有限自动机和正则表达式的现实世界应用 但诸如此类的其他主题给我带来了更多问题 因为我没有看到任何现实世界的应用 如果您想知道尝试使用正则表达式做某事是否徒劳
  • Ruby on Rails - 在包含 I18n 的 link_to 调用中嵌入额外的 HTML

    我正在尝试在 link to 调用中嵌入额外的 HTML 如本线程中所示在 link to 调用中嵌入额外的 HTML https stackoverflow com questions 9403256 embed additional h
  • “依赖系统的时区设置并不安全”

    我有一个一周前完成的脚本 没有任何问题或错误 今天 我再次测试 收到以下消息 严格标准 date function date 依赖并不安全 系统的时区设置 请使用 date timezone 设置 TZ 环境变量或 date default
  • Android 如何获取所有浏览器应用中的浏览历史记录?

    我想获取android手机中不同浏览器的所有浏览历史记录 也许您知道 一部手机中通常有多个浏览器应用程序 假设您的所有浏览器都使用此 API 来保存历史记录 这应该对您有用 http developer android com refere
  • Node.js sqlite3 IN 运算符

    所以我目前正在尝试在 Node js 中进行查询 friends is an array object db all SELECT email FROM users WHERE email in friends function err r
  • 颤振:缺少 google_app_id。 Firebase 分析已禁用

    我想从一个设备向另一个设备发送通知 但是当我发送它时 我进入了接收器设备 D FLTFireMsgReceiver 8876 broadcast received for message E FA 8876 Missing google a
  • 如何组合多个grep命令?

    我有一个很长的 txt 文件 LONG txt 在该 txt 文件中 我想搜索 3 种类型的模式 然后我想将 grep 结果捕获到一个新的 txt 文件中 SHORT txt 图案 AAAAA BBBBB CCCCC NOTE 当图案AAA
  • Vim 代码补全

    是否可以让 Vim 为您完成代码 就像在任何其他 IDE 中一样 不仅仅是单词搜索 还包括类成员 方法等 可用的最佳选项 插件有哪些 铿锵完成 http www vim org scripts script php script id 33
  • 如果消费者持有消息的时间超过自动提交间隔时间,kafka会丢失消息吗?

    假设自动提交间隔时间为 30 秒 消费者由于某种原因无法处理消息并保留消息超过 30 秒然后崩溃 自动提交偏移量机制是否会在消费者崩溃之前提交此偏移量 如果我的假设是正确的 消息会因其偏移量提交而丢失 但消息本身尚未被处理 让我们假设您的消
  • 使用 C++ 查找向量的中值

    我是一名编程学生 对于我正在从事的一个项目 我必须做的事情之一是计算 int 值向量的中值 并且必须通过将其传递给函数来完成 此外 向量最初是使用 C 随机生成器 mt19937 随机生成的 我已经在代码中写下了该生成器 我将使用排序函数和
  • 使用 json.net 对对象属性进行条件序列化/反序列化[重复]

    这个问题在这里已经有答案了 我有一个场景 其类定义如下 class MyObject public DataDictionary MyObjectData get set public bool ShouldSerializeMyObjec
  • 未定义的方法`authenticate_user! Devise / Rails 4 中的 Api::PostsController

    我的项目中有以下路线 root home index namespace api defaults format json do devise for users controllers sessions api sessions reso
  • MySQL 限制 TIMESTAMP 范围的解决方法?

    有谁知道在 MySQL TIMESTAMP 字段中存储 1970 01 01 00 00 01 UTC 到 2038 01 09 03 14 07 UTC 范围之外的值的解决方法 如果将列更改为使用 DATETIME 类型 则可以存储更广泛
  • sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的表

    我定义了表名users table并运行db create all 创建表 但在提交更新用户信息时出现错误 no such table user table 我如何测试 under project python3 manage py she