0

在这样的删除后执行会话提交时,我收到一个我不明白的错误:(在带有烧瓶应用程序上下文的外壳中或运行应用程序时的任何地方)

>>> from app.extensions import db
>>> from app.models.user import User
>>> user = User.query.all()[0]
>>> db.session.delete(user)
>>> db.session.commit()

文件“/Users/hugo/Dropbox/lahey/api/.venv/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py”,第 962 行,模块 % (self._il_path, self._il_addtl) ) ImportError: importlater.resolve_all() 没有被调用(这是 sqlalchemy.orm strategy_options)

我尝试删除的对象的模型如下所示:

import datetime
from sqlalchemy_utils.types.password import PasswordType
from sqlalchemy_utils import force_auto_coercion

from app.extensions import db

# Setup coercion of passwords
force_auto_coercion()


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(PasswordType(schemes=['pbkdf2_sha512']), nullable=False)
    name = db.Column(db.String(256))
    created_at = db.Column(db.DateTime, default=datetime.datetime.now)
    updated_at = db.Column(db.DateTime, onupdate=datetime.datetime.now)

删除其他模型的对象工作正常。这可能是因为我正在使用 sqlalchemy_utils 中的 PasswordType 列吗?

4

2 回答 2

0

我已经弄清楚是什么原因造成的。我一直在使用包sqlalchemy_bulk_lazy_loader ,它有一个错误(strategy_options 没有以正确的方式导入)。该问题现已在包中修复

有关完整详细信息,请参阅完整的sqlalchemy 邮件列表线程

于 2017-11-10T12:44:30.420 回答
0

如果您正在使用Flask,文档说明您配置错误Column

Lazy configuration of the type with Flask config:

        import flask
        from sqlalchemy_utils import PasswordType, force_auto_coercion

        force_auto_coercion()

        class User(db.Model):

            __tablename__ = 'user'

            password = db.Column(
                PasswordType(
                    # The returned dictionary is forwarded to the CryptContext
                    onload=lambda **kwargs: dict(
                        schemes=flask.current_app.config['PASSWORD_SCHEMES'],
                        **kwargs
                    ),
                ),
                unique=False,
                nullable=False,
            )
于 2017-11-07T11:15:13.243 回答