使用 sqlalchemy 执行删除和提交时出错
Error when doing delete and commit with sqlalchemy
我在像这样删除后进行会话提交时收到一个我不明白的错误:(在 shell 带有 Flask 应用程序上下文或 运行 应用程序时的任何地方)
>>> from app.extensions import db
>>> from app.models.user import User
>>> user = User.query.all()[0]
>>> db.session.delete(user)
>>> db.session.commit()
File
"/Users/hugo/Dropbox/lahey/api/.venv/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py",
line 962, in module
% (self._il_path, self._il_addtl)) ImportError: importlater.resolve_all() hasn't been called (this is 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 列
如果您使用的是 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,
)
我已经弄清楚是什么原因造成的。我一直在使用包 sqlalchemy_bulk_lazy_loader
它有一个错误(strategy_options 没有以正确的方式导入)。现在的问题是 fixed in the package
查看完整 sqlalchemy mail list thread 了解完整详情
我在像这样删除后进行会话提交时收到一个我不明白的错误:(在 shell 带有 Flask 应用程序上下文或 运行 应用程序时的任何地方)
>>> from app.extensions import db
>>> from app.models.user import User
>>> user = User.query.all()[0]
>>> db.session.delete(user)
>>> db.session.commit()
File "/Users/hugo/Dropbox/lahey/api/.venv/lib/python3.6/site-packages/sqlalchemy/util/langhelpers.py", line 962, in module % (self._il_path, self._il_addtl)) ImportError: importlater.resolve_all() hasn't been called (this is 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 列如果您使用的是 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, )
我已经弄清楚是什么原因造成的。我一直在使用包 sqlalchemy_bulk_lazy_loader 它有一个错误(strategy_options 没有以正确的方式导入)。现在的问题是 fixed in the package
查看完整 sqlalchemy mail list thread 了解完整详情