SQLAlchemy-Marshmallow taking way to long to generate JSON

53 Views Asked by At

Using sqlalchemy and marshmallow I generate a class and a schema:

class Company2(db.Model):
    __tablename__ = "company2"
    __searchable__ = ['name2']
    id = db.Column(db.Integer, unique=True, primary_key=True)
    uuid = db.Column(db.String(32), unique=True, nullable=False, default=get_uuid)
    code = db.Column(db.String(30))
    jarCode = db.Column(db.String(30))
    date = db.Column(db.String(30))
    month = db.Column(db.String(30))
    name  = db.Column(db.String(120))
    avgWage = db.Column(db.String(50))
    avgWage2 = db.Column(db.String(50))
    numInsured = db.Column(db.String(100))
    numInsured2 = db.Column(db.String(100))
    tax = db.Column(db.String(50))
    debt = db.Column(db.String(50))
    deferredDebt = db.Column(db.String(50))
    upvote = db.Column(db.Integer, default=0)
    downvote = db.Column(db.Integer, default=0)

    details = db.relationship('CompanysDetailsSecond', backref='author', lazy=True)
    basic_data = db.relationship('CompanyBasicData', backref='author', lazy=True)
    public_data = db.relationship('Public', backref='author', lazy=True)
    vote = db.relationship('Vote', backref='author', lazy=True)


class CompanyBasicData(db.Model):
    __tablename__ = "companybasicdata"
    id = db.Column(db.Integer, primary_key=True)
    uuid = db.Column(db.String(32), unique=True, default=get_uuid)
    information = db.Column(JSON)
    user_id = db.Column(db.Integer, db.ForeignKey('company2.id'), nullable=False)

class BasicMarsmellow(SQLAlchemySchema):
 
    # from infromation JSON field extract activityCode
    activityCode = ma.String(attribute="information.data.activityCode")
                              

class MarsmellowNested(SQLAlchemyAutoSchema):
    class Meta:
        model = Company2
    basic_data = Nested(BasicMarsmellow, many=True)

BasicMarsmellow already contains JSON data in sqlalchemy field, so no serialization is required, but when I added this BasicMarsmellow schema, request is taking way to long, 5 seconds to fetch 12 records using pagination method of sqlalchemy. is there any way to optimise code?

0

There are 0 best solutions below