Python KeyError:*使用SQLAlchemy运行db.session.add-on Flask时,数值非常大*

Python KeyError:*使用SQLAlchemy运行db.session.add-on Flask时,数值非常大*,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我有一个用户类: class User(db.Model, UserMixin): """ ORM Class: An object that represents a user """ __tablename__ = "Users" id = db.Column('id', db.Integer, primary_key=True) email = db.C

我有一个用户类:

class User(db.Model, UserMixin):
    """
    ORM Class: An object that represents a user
    """
    __tablename__ = "Users"
    id              = db.Column('id',           db.Integer,             primary_key=True)
    email           = db.Column('email',        db.String(128),         unique=True)
    passwordhash    = db.Column('passwordhash', db.String(128))

def __init__(self, email, password):
    self.email = email
    self.passwordhash = generate_password_hash(password)

    logging.info("creating user with email and pw:" + email + " " + password)
当我创建一个新用户时:

newuser = User(email="test@email.com", password="hunter2")
db.session.add(newuser)
我得到一个密钥错误:140736669950912

  File "/usr/local/lib/python3.6/site-packages/sqlalchemy/util/_collections.py", line 988, in __call__
    return self.registry[key]
KeyError: 140736669950912
这个号码是从哪里来的?在处理该KeyError的过程中,我还遇到了另一个错误,这是一个
运行时错误:应用程序未在db实例上注册,并且没有应用程序绑定到当前上下文,
与其手动创建
SqlAlchemy()
的实例并将其保存到
db
,不如尝试从
SqlAlchemy.ext.declarative.Base
继承,如下所示:

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine(DATABASE_URI, echo=False)
db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))

Base = declarative_base()
Base.query = db_session.query_property()


# the following should be moved to your models.py

from sqlalchemy import Column, Integer, String

class User(Base):
    """ORM Class: An object that represents a user
    """
    __tablename__ = "Users"

    id = Column(Integer)
    email = Column(String(128), primary_key=True)
    passwordhash = Column(String(128), unique=True)

检查您的迁移是否最新也可能有所帮助。当我遇到这个问题时,在我删除现有迁移并重新运行迁移后,它得到了修复:

python manage.py db migrate
python manage.py db ugrade

您可以添加完整的堆栈跟踪吗?当我尝试在控制台中运行Person.query.all()或任何其他select查询时会发生这种情况。您好,知道手动创建SqlAlchemy()实例有什么问题吗?这是许多SQLAlchemy+Flask教程所使用的方法,因此我遵循相同的方法,但最终会出现KeyError。@shiouming我记得这与未正确设置应用程序上下文有关。看见