Ошибка при удалении и фиксации с помощью sqlalchemy
Я получаю сообщение об ошибке, которое не понимаю, когда выполняю фиксацию сеанса после удаления, например: (в оболочке с контекстом приложения фляги или в любом месте при запуске приложения)
>>> 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)
Удаление объектов других моделей работает нормально. Может ли это быть как-то потому, что я использую столбец PasswordType из sqlalchemy_utils?
2 ответа
Я выяснил, что вызвало это. Я использовал пакет https://github.com/operator/sqlalchemy_bulk_lazy_loader котором была ошибка (Strategy_options не был импортирован правильно). Теперь проблема исправлена в пакете
Смотрите полную ветку списка рассылки sqlalchemy для получения полной информации.
Если вы используете 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, )