выберите отдельный ключ и значение в flask sqlalchemy (flask restful API) - PullRequest
0 голосов
/ 24 февраля 2020

У меня проблемы с тем, как вернуть ключ, и значения подсчитываются из моей таблицы работников БД, где каждый клиент дал оценку работникам. Я хочу вернуть рейтинг каждого работника. Мои модели БД, конечные точки, как показано ниже:

@classmethod
def distinct_rating_count(cls, _workerId):
    return {'rating_count': [c[0] for c in
                             db.session.query
                             (func.count(distinct(RatingModel.rating)))
                             .filter_by(workerId=_workerId)
                             .group_by(RatingModel.rating)]}

класс RatingModel (db.Model):

__tablename__ = 'rating'
id = db.Column(db.Integer(), primary_key=True)
rating = db.Column(db.Integer(), nullable=False)
rateDate = db.Column(db.DateTime, default=datetime.datetime.utcnow)
comments = db.Column(db.String(512), nullable=True)

userId = db.Column(db.Integer(), db.ForeignKey('users.id'))
user = db.relationship('UserModel')
workerId = db.Column(db.Integer(), db.ForeignKey('workers.id'))
worker = db.relationship('WorkerModel')

def __init__(self, userId, workerId, rating, comments):

    self.userId = userId
    self.workerId = workerId
    self.rating = rating
    self.comments = comments

класс DistinctRatingCount (Resource):

def get(self, workerId):
    ratingcount = RatingModel.distinct_rating_count(workerId)
    if ratingcount:
        return ratingcount
    else:
        return {'message': 'There is no rating yet'}

classmethod different_rating_count возвращает:

{"rating_count": [1, 1, 1]}

Однако я хочу что-то вроде словаря, если для некоторых работников нет значения рейтинга, например в приведенном ниже примере ни один работник с рейтингом «1» и «4» не должен быть помечен 0 раз:

{«1»: 0, «2»: 3, «3»: 5, "4": 0, "5": 2}

Я очень много пытался найти stackoverflow и погуглил его, я не смог получить правильную подсказку. заранее спасибо.

//////////////////////////////////////////// //////////////////////////////// наконец-то по методике @Shivendra Pratap Kushwaha с небольшими изменениями, я разобрался, как показано ниже :

@classmethod def distinct_rating_count(cls, _workerId): rating = dict(cls.query.with_entities (RatingModel.rating, func.count( RatingModel.rating)) .group_by(RatingModel.rating) .filter_by(workerId=_workerId))

---------- {"1": 2, "4": 1, "5": 2}

1 Ответ

1 голос
/ 24 февраля 2020

Это может дать вам пример того, как это можно сделать. В данном случае я беру пример простой модели ученика:

Модель ученика:

1.) Id

2.) Предмет

3.) school_id

Теперь я хочу вычислить student.id и соответствующее количество предметов из всех строк, имеющих определенный school_id.

Мне нужен какой-то словарь, например CountStudDi c = {"1": 0, "2": 3, "3": 5, "4": 0, "5": 2} (по состоянию на ваш)

Итак, вот как это сделать:

CountStudDic = dict(Student.query.with_entities(Student.id,func.count(Student.subject)).group_by(Student.subject).filter_by(school_id=str(current_user.id)).all())

Основная идея c состоит в том, чтобы взять обе сущности и преобразовать их в словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...