Wie verschiedene Matrix-Ausgänge zu speichern, die auf einer SQL-Abfrage in Python hängt?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
AntoineP
User
Beiträge: 23
Registriert: Donnerstag 6. Juli 2017, 10:57

Montag 17. Juli 2017, 14:30

Ich habe eine SQL-Abfrage, die auf einem Tisch ab.

Aber ich kann nicht die Unterscheidung zwischen den verschiedenen Einträgen in der Tabelle machen. Ich möchte ihnen sagen, auseinander.

Das folgende Beispiel Tabelle ist eine Tabelle von Inhalten, die mit subscriber_id eclipse_id interagieren.

Bisher in dieser Gruppe Tabelle X für Gruppen 0 und 1:

Code: Alles auswählen

res['ids']
grupos
0                                  [160, 161, 296]
1                                            [306]
Und das tabula X, die Interaktionen mit Y wie folgt :

Code: Alles auswählen

subscriber_id  eclipse_id
160            996
160            592
161            996
161            592
296            996
306            329
306            325
306            1214
Ich kann die folgende Abfrage machen:

Code: Alles auswählen

        for i, ids in enumerate(self.res['ids']):
            cur.execute("""--- hashtag qui decrivent le mieux les groupes
            SELECT COUNT(swipe.eclipse_id), 
            subscriber_hashtag.hashtag_id
            FROM subscriber_hashtag
            INNER JOIN eclipse_hashtag ON eclipse_hashtag.hashtag_id = subscriber_hashtag.hashtag_id
            LEFT OUTER JOIN swipe ON subscriber_hashtag.subscriber_id = swipe.subscriber_id
            WHERE (swipe.state= 3 OR swipe.state = 6 or swipe.state=9) AND subscriber_hashtag.subscriber_id in %s
            GROUP BY subscriber_hashtag.hashtag_id
                ORDER BY COUNT(swipe.eclipse_id) DESC;""",
            (tuple(self.res.iloc[i]['ids']),))
        n = cur.fetchall()
        listado = [{"count": elem[0], "eclipse_id": elem[1]} for elem in n]
Und ich gebt die folgende :

Code: Alles auswählen

[{'count': 3, 'eclipse_id': 996}, {'count': 2, 'eclipse_id': 592}, 
{'count': 1, 'eclipse_id': 329}, {'count': 1, 'eclipse_id': 325},
{'count': 1, 'eclipse_id': 1214}]
Aber wir können nicht wissen, welches Ergebnis sie zu jeder Gruppe gehören.
Ich würde die folgenden haben geliebt :

Code: Alles auswählen

[[{'count': 3, 'eclipse_id': 996}, {'count': 2, 'eclipse_id': 592}],[ 
{'count': 1, 'eclipse_id': 329}, {'count': 1, 'eclipse_id': 325},
{'count': 1, 'eclipse_id': 1214}]]
Können Sie ihm helfen?
Benutzeravatar
noisefloor
User
Beiträge: 2474
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 19. Juli 2017, 13:22

Hallo,

ich verstehe die Frage nicht wirklich... Das Ergebnis ist doch genau das, was du in der Zeile `listado = [...]` generierst - eine Liste, welche eine Reihe von Dicts enthält.

Wenn du eine Liste von Liste haben willst, wie es ja anscheinend gewünscht ist, dann musst du dir die aus dem Ergebnis entsprechend "bauen". Allerdings ist mir anhand des Beispiels nicht klar, nach welche Kriterium die Listen gruppiert sein sollen.

Gruß, noisefloor
Antworten