防止棉花糖查询数据库

如何解决防止棉花糖查询数据库

我想完全阻止棉花糖查询数据库

在解释性代码片段下方

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?