Python flask db init返回;sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的表;

Python flask db init返回;sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)没有这样的表;,python,sqlite,flask,flask-migrate,Python,Sqlite,Flask,Flask Migrate,我一直在使用sqlite数据库开发flask中的web应用程序。到目前为止,这一切进展顺利,我知道,一旦数据库存在,sqlite在表的更改方面是有限的 但是,到目前为止,我已经能够在models.py中修改多个模型的表(添加列、重命名列等),没有问题。这里我用的是什么 migrate = Migrate(app, db, render_as_batch=True) 在应用程序初始化中,这是实现对数据库的一些更改所必需的 但是现在,在向模型“User”添加新列后,尝试运行flask db mig

我一直在使用sqlite数据库开发flask中的web应用程序。到目前为止,这一切进展顺利,我知道,一旦数据库存在,sqlite在表的更改方面是有限的

但是,到目前为止,我已经能够在models.py中修改多个模型的表(添加列、重命名列等),没有问题。这里我用的是什么

migrate = Migrate(app, db, render_as_batch=True)
在应用程序初始化中,这是实现对数据库的一些更改所必需的

但是现在,在向模型“User”添加新列后,尝试运行
flask db migrate
时,我收到了以下错误:

据我所知,这将重新启动整个数据库(包括新的迁移脚本)。有趣的是,这会抛出与上述完全相同的错误。我也完全不明白,因为没有数据库可以读取

我的用户模型如下(我试图添加的专栏已被评论):

类用户(UserMixin,db.Model):
id=db.Column(db.Integer,主键=True)
username=db.Column(db.String(64),index=True,unique=True)
email=db.Column(db.String(120),index=True,unique=True)
密码\u hash=db.Column(db.String(128))
actions=db.relationship('Action',backref='owner',lazy='dynamic')
events=db.relationship('WebLogEvent',backref='user',lazy='dynamic')
has_admin_rights=db.Column(db.Boolean)
is_customer=db.Column(db.Boolean)
#权限=db.Column(db.String(256),索引=True)
定义报告(自我):
返回“”。格式(self.username)
@静力学方法
def表格_标题():
返回[“ID”、“用户名”、“电子邮件”、“管理员”]
def设置_密码(自我、密码):
self.password\u hash=生成密码\u hash(密码)
def检查_密码(自我、密码):
返回检查\u密码\u散列(self.password\u散列,password)
def as_表_行(自身):
return[self.id、self.username、self.email、self.has_admin_权限]

非常欢迎您对此处可能出现的问题提出任何想法。

您正在应用程序的全局范围内,在类
NewActionForm
中发出一个查询。根据堆栈跟踪,查询为
User.query.all()

问题是全局范围内的代码在导入时执行。对于许多事情来说,这是可以的,但是数据库访问通常是有问题的,因为您必须在访问数据库之前创建和配置Flask应用程序实例


因此,解决方案是不在全局范围内查询数据库。您可能可以将该逻辑移到表单的构造函数方法中。

您好,非常感谢您的快速回复!成功了!
    Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1249, in _execute_context
    cursor, statement, parameters, context
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/default.py", line 580, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: user

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/flask", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.6/dist-packages/flask/cli.py", line 966, in main
    cli.main(prog_name="python -m flask" if as_module else None)
  File "/usr/local/lib/python3.6/dist-packages/flask/cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.6/dist-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/flask/cli.py", line 425, in decorator
    with __ctx.ensure_object(ScriptInfo).load_app().app_context():
  File "/usr/local/lib/python3.6/dist-packages/flask/cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "/usr/local/lib/python3.6/dist-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  File "/home/arthur/Development/ISLWeb/islweb.py", line 1, in <module>
    from app import app, db
  File "/home/arthur/Development/ISLWeb/app/__init__.py", line 24, in <module>
    from app import routes, models
  File "/home/arthur/Development/ISLWeb/app/routes.py", line 11, in <module>
    from app.forms import (LoginForm, RegistrationForm, CreateLaunchForm, 
  File "/home/arthur/Development/ISLWeb/app/forms.py", line 93, in <module>
    class NewActionForm(FlaskForm):
  File "/home/arthur/Development/ISLWeb/app/forms.py", line 95, in NewActionForm
    users = User.query.all()
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/orm/query.py", line 3186, in all
    return list(self)
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/orm/query.py", line 3342, in __iter__
    return self._execute_and_instances(context)
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/orm/query.py", line 3367, in _execute_and_instances
    result = conn.execute(querycontext.statement, self._params)
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 988, in execute
    return meth(self, multiparams, params)
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/sql/elements.py", line 287, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1107, in _execute_clauseelement
    distilled_params,
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1253, in _execute_context
    e, statement, parameters, cursor, context
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1473, in _handle_dbapi_exception
    util.raise_from_cause(sqlalchemy_exception, exc_info)
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/util/compat.py", line 398, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb, cause=cause)
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/util/compat.py", line 152, in reraise
    raise value.with_traceback(tb)
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/base.py", line 1249, in _execute_context
    cursor, statement, parameters, context
  File "/usr/local/lib/python3.6/dist-packages/sqlalchemy/engine/default.py", line 580, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: user
[SQL: SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.password_hash AS user_password_hash, user.has_admin_rights AS user_has_admin_rights, user.is_customer AS user_is_customer 
FROM user]
(Background on this error at: http://sqlalche.me/e/e3q8)
flask db init
class User(UserMixin, db.Model):
    
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    actions = db.relationship('Action', backref='owner', lazy='dynamic')
    events = db.relationship('WebLogEvent', backref='user', lazy='dynamic')
    has_admin_rights = db.Column(db.Boolean)
    is_customer = db.Column(db.Boolean)
    #permissions = db.Column(db.String(256), index=True)
    
    def __repr__(self):
        return '<User {}>'.format(self.username)
        
    @staticmethod
    def table_header():
        return ["ID", "Username", "e-mail", "Admin"]
    
    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 as_table_row(self):
        return [self.id, self.username, self.email, self.has_admin_rights]