2

我的数据库中有以下示例表,我用 Flask_SQLAlchemy 管理它。

class Employee(db.Model):
    __tablename__ = 'employee'
    id = db.Column(db.Integer, primary_key=True)
    salutation = db.Column(db.String(250), nullable=False)
    first_name = db.Column(db.String(250), nullable=False)
    last_name = db.Column(db.String(250), nullable=False)
    
    employments = db.relationship('Employment', foreign_keys='Employment.employee_id', backref="employee", lazy=True)

我的 Flask 架构如下所示:

class EmployeeSchema(mm.SQLAlchemyAutoSchema):
    class Meta:
        model = DB_employee.Employee
        include_fk = True
        include_relationships = True

以下是我对员工 GET 的路由:

class EmployeesListAPI(Resource):
    def __init__(self):
        self.reqparse_get = reqparse.RequestParser()
        self.reqparse_get.add_argument('employee_id', type=int, action='append', required=False, location='args')
        self.reqparse_get.add_argument('salutation', type=str, action='append', required=False, location='args')
        self.reqparse_get.add_argument('first_name', type=str, required=False, location='args')
        self.reqparse_get.add_argument('last_name', type=str, required=False, location='args')
        
        super(EmployeesListAPI, self).__init__()

    def get(self):
        get_args = self.reqparse_get.parse_args()
        employees = get_list_employee(get_args)
        
        employees_output = EmployeeSchema(many=True, only=get_args['return_fields']).dump(employees)
            
        return employees_output, 200

如果我现在运行它,使用 SQL-Alhchemy 的查询大约需要 0.01 秒,这对我来说没问题,但使用 Flask_Marshmallow 的序列化大约需要 1.3 秒。

如果我将架构更改如下:include_relationships = False并手动运行序列化:

for employee, output in zip(employees, employees_output):
            if get_args['show_employments']:
                output['employments'] = [e.id for e in employee.employments]

用棉花糖序列化大约需要 0.02 秒,手动添加的就业关系大约需要 1.2 秒。

在我的真实案例中,我的关系远不止一个关系,数据的序列化需要惊人的 32 秒。

有没有办法用棉花糖加速序列化?难道我做错了什么?

谢谢您的支持。

4

0 回答 0