Результаты двойного счета Postgres + Sqlalchemy

Я сталкиваюсь с дублирующимися результатами в моем запросе sqlalchemy + postgres. У меня есть модель, подобранная ниже:

class Audio(db.Model): __tablename__ = "audio" id = db.Column(db.Integer, primary_key=True) file_location = db.Column(db.String(), unique=True) upload_time = db.Column(ArrowType, default=arrow.utcnow()) keyword = db.Column(JSON) transcript = db.Column(JSON) diarization = db.Column(JSON) user_id = db.Column(db.Integer, db.ForeignKey('user.id', onupdate='cascade', ondelete='cascade')) company_id = db.Column(db.Integer, db.ForeignKey('company.id', onupdate='cascade', ondelete='cascade')) client_id = db.Column(db.Integer, db.ForeignKey('client.id', onupdate='cascade', ondelete='cascade')) def __init__(self, file_location, upload_time, keyword, transcript, diarization, user_id, company_id, client_id): self.file_location = file_location self.upload_time = upload_time self.keyword = keyword self.transcript = transcript self.diarization = diarization self.user_id = user_id self.company_id = company_id self.client_id = client_id def __repr__(self): return '<Audio ID %r>' % self.id 

И под транскрипцией вход является json-объектом:

 {"transcript": [ {"p": 0, "s": 0, "e": 320, "c": 0.545, "w": "This"}, {"p": 1, "s": 320, "e": 620, "c": 0.825, "w": "call"}, {"p": 2, "s": 620, "e": 780, "c": 0.909, "w": "is"}, {"p": 3, "s": 780, "e": 1010, "c": 0.853, "w": "being"} ... ]} 

Я пытаюсь фильтровать записи на основе значения из «w» и запрашивать его соответствующие Audio.id и «p». Я пробовал следующее:

  transcript_subquery = s.query(func.json_array_elements(Audio.transcript['transcript']).label('transcript')).subquery() temp = transcript_subquery.c.transcript.op('->>')('w').cast(String) temp1 = transcript_subquery.c.transcript.op('->>')('s').cast(Integer) query = s.query(temp1, Audio.id).filter(temp.ilike("all")) 

Проблема, которая у меня есть, заключается в том, что прямо сейчас у меня есть только 5 записей данных, и одно из полей транскрипта ввода данных пустое. Однако я получил результат, который содержит следующее:

 (665610, 5), (736413, 5), (907230, 5), (942340, 5), (1020852, 5), (1023942, 5), (1037101, 5), (1078521, 5), (1105581, 5), (1117551, 5), (1372730, 5), (1501960, 5), (1508410, 5) 

Это действительно странно, что запись, в которой Audio.id = 5 даже не имеет объекта jScript-расшифровки, пока не производит такой результат. Более того, все записи имеют 112 результатов. И я подозреваю, что 112 – это общее число, которое появляется в этом слове, и оно несколько удваивает счет для каждого идентификатора аудио. И я действительно не знаю, как исправить мой запрос sqlalchemy.

Python - лучший язык программирования в мире.