如何解决防止棉花糖查询数据库
在解释性代码片段下方
from flask_sqlalchemy import sqlAlchemy
from marshmallow_sqlalchemy import sqlAlchemyAutoSchema
from flask_restful import Resource
db = sqlAlchemy()
class FooModel(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(256))
picture = db.Column(db.String(256))
about = db.Column(db.String(256))
class FooSchema(sqlAlchemyAutoSchema):
class Meta:
model = FooModel
class FooRessource(Resource):
def get(self):
foo = FooModel(name="Mi",picture="pic",about="ab")
db.session.add(foo)
db.session.commit()
created = FooModel.query.options(db.load_only("name")).first()
created_data = FooSchema().dump(created)
return {'data': created_data}
我已使用 sqlALCHEMY_ECHO = True
打开 sqlAlchemy 日志。现在可以从日志中看到这一点
INFO sqlalchemy.engine.Engine:log.py:117 INSERT INTO foo_model (name,picture,about) VALUES (%(name)s,%(picture)s,%(about)s) RETURNING foo
_model.id
INFO sqlalchemy.engine.Engine:log.py:117 [generated in 0.00040s] {'name': 'Mi','picture': 'pic','about': 'ab'}
INFO sqlalchemy.engine.Engine:log.py:117 COMMIT
INFO sqlalchemy.engine.Engine:log.py:117 BEGIN (implicit)
INFO sqlalchemy.engine.Engine:log.py:117 SELECT foo_model.id AS foo_model_id,foo_model.name AS foo_model_name
FROM foo_model
LIMIT %(param_1)s
INFO sqlalchemy.engine.Engine:log.py:117 [generated in 0.00024s] {'param_1': 1}
INFO sqlalchemy.engine.Engine:log.py:117 SELECT foo_model.picture AS foo_model_picture,foo_model.about AS foo_model_about
FROM foo_model
WHERE foo_model.id = %(pk_1)s
INFO sqlalchemy.engine.Engine:log.py:117 [generated in 0.00026s] {'pk_1': 1}
如您所见,有两个 db select
查询,一个来自我的资源,另一个来自 Marshmallow。
当我像遵循 created_data = FooSchema(only="name",)).dump(created)
一样更新我的架构实例时,来自 Marshmallow 的查询消失了,您可以在下面看到我想要的内容。
INFO sqlalchemy.engine.Engine:log.py:117 INSERT INTO foo_model (name,%(about)s) RETURNING foo
_model.id
INFO sqlalchemy.engine.Engine:log.py:117 [generated in 0.00024s] {'name': 'Mi',foo_model.name AS foo_model_name
FROM foo_model
LIMIT %(param_1)s
INFO sqlalchemy.engine.Engine:log.py:117 [generated in 0.00021s] {'param_1': 1}
我想知道是否有一种优雅的方式告诉棉花糖不要查询数据库并使用实例上的可用数据进行反序列化。我正在处理大型项目,现在这有问题,因为棉花糖可以来查询很多关系的不需要的数据,导致请求超慢。
任何建议、文档参考或提前将不胜感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。