def fetch_trigrams(): for tag in TARGET_TAGS: # This manual transfer to a list seems necessary, instead of interating # through the selected lines, due to an exception that is thrown # in the latter case. tag_pairs = [] for bg in Bigram.select().where(Bigram.tag1 == tag): tag_pairs.append((bg.tag1, bg.tag2)) for pair in tag_pairs: resp = session.get(make_url([pair[0], pair[1]]), params={ 'pagesize': 100, 'site': 'stackoverflow', }) respJson = resp.json() if 'items' not in respJson.keys(): continue for i in respJson['items']: tags = [pair[0], pair[1], i['name']] tags_ord = sorted(tags) try: tg = Trigram.create(tag1=tags_ord[0], tag2=tags_ord[1], tag3=tags_ord[2]) except peewee.IntegrityError: tg = Trigram.get( Trigram.tag1 == tags_ord[0], Trigram.tag2 == tags_ord[1], Trigram.tag3 == tags_ord[2], ) tg.count = i['count'] tg.save()